所以我基本上想要实现的是将每个文件存档在指定的目录中,并且生成的存档的名称由压缩文件的创建日期组成。
假设我们有一个目录,其中有文件 A。文件 A 的创建日期是 2008-18-10-20:12:54(我们可以要求ls
显示确切的日期)。因此,生成的存档应命名为2008-18-10-20:12:54.7z并位于另一个目录中。
我想到最好的办法如下:
for file in $HOME/tmp; do
7z a -mhe=on -mx=0 -p123456 $HOME/tmp-done/`ls -l "$HOME"/tmp/ --time-style=+%Y-%m-%d_%H:%M:%S "$file" | awk '{ print $6 }'`.7z $file;
done
据我了解,上述命令应指示 bash 读取~/tmp/
目录中的所有文件,然后针对每个文件使用参数执行 7z。其中一个参数应为根据存档文件的创建日期计算出的存档名称。存档文件应在~/tmp-done
目录中创建。
它应该在目录中生成一批 7z 文件~/tmp-done/
,但它却完全忽略ls
部分并创建一个~/home/done/.7z
包含所有压缩文件的文件。
我确实认为我错过了在 7z 的参数部分中处理这个子命令的方法,但无法弄清楚。
任何指南都将受到感激。
答案1
尝试以下 bash 脚本
set -ex
DIR_WITH_FILES="/tmp/myfiles"
DIR_WITH_ARCHIVES="/tmp/myarchives"
for file in $(ls -1 "${DIR_WITH_FILES}"); do
filename=$(ls -l --time-style=+%Y-%m-%d_%H:%M:%S "${DIR_WITH_FILES}/${file}" | awk '{ print $6 }')
7z a -mhe=on -mx=0 -p123456 -- "${DIR_WITH_ARCHIVES}/${filename}.7z" "${DIR_WITH_FILES}/${file}"
done