我的服务器中有一个包含一些文件的文件夹。这些都是自动化的,这意味着我们每天都会自动获取新文件,这将覆盖旧文件。 所以想要备份这些数据。 如何通过在复制时使用当前日期重命名文件,将所有这些文件复制到另一个文件夹中。
例如:我有一个名为folder1的文件夹,其中包含4个文件。此文件夹的路径是home / webapps / project1 / folder1
现在我想将所有这四个文件复制到名为folder2的不同文件夹中。 此文件夹的路径是home / webapps / project1 / folder2。 复制这些文件时,我想重命名每个文件并将当前日期添加到文件中。 所以我在folder2中的文件名应该是..
我想为此编写一个shell脚本。请给我一些想法或一些与此相关的示例脚本。
答案 0 :(得分:31)
在bash
中,如果您的文件名称没有空格:
cd /home/webapps/project1/folder1
for f in *.csv
do
cp -v "$f" /home/webapps/project1/folder2/"${f%.csv}"$(date +%m%d%y).csv
done
答案 1 :(得分:2)
您可以使用如下所示的脚本。您只需要更改日期选项以匹配您想要的格式。
#!/bin/bash
for i in `ls -l /directroy`
do
cp $i /newDirectory/$i.`date +%m%d%Y`
done
答案 2 :(得分:2)
path_src=./folder1
path_dst=./folder2
date=$(date +"%m%d%y")
for file_src in $path_src/*; do
file_dst="$path_dst/$(basename $file_src | \
sed "s/^\(.*\)\.\(.*\)/\1$date.\2/")"
echo mv "$file_src" "$file_dst"
done
答案 3 :(得分:2)
有一种正确的方法来拆分文件名和扩展名:Extract filename and extension in Bash
你可以像这样申请:
date=$(date +"%m%d%y")
for FILE in folder1/*.csv
do
bname=$(basename "$FILE")
extension="${bname##*.}"
filenamewoext="${bname%.*}"
newfilename="${filenamewoext}${date}.${extension}
cp folder1/${FILE} folder2/${newfilename}
done
答案 4 :(得分:0)
cp --archive home/webapps/project1/folder1/{aaa,bbb,ccc,ddd}.csv home/webapps/project1/folder2
rename 's/\.csv$/'$(date +%m%d%Y).csv'/' home/webapps/project1/folder2/{aaa,bbb,ccc,ddd}.csv
说明:
--archive
确保以相同的所有权和权限复制文件。foo{bar,baz}
已扩展为foobar foobaz
。rename
是一种常用的程序,可以完成这种替换。答案 5 :(得分:0)
您可以使用此步骤非常有用:
for i in `ls -l folder1 | grep -v total | awk '{print $ ( ? )}'`
do
cd folder1
cp $i folder2/$i.`date +%m%d%Y`
done