在批量存档中使用文件创建日期作为存档名称(7zip)

在批量存档中使用文件创建日期作为存档名称(7zip)

所以我基本上想要实现的是将每个文件存档在指定的目录中,并且生成的存档的名称由压缩文件的创建日期组成。

假设我们有一个目录,其中有文件 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

相关内容