Zip,使用bash脚本命名和移动文件到另一个目录



我有一个传入的数据提要,我想编写一个bash脚本来定期处理它。部分脚本需要获取新文件并像下面描述的那样归档它们:

  1. 查找data中的所有文件/子文件夹。
  2. 压缩这些文件/子文件夹,并以当前日期命名Zip。
  3. 移动zip到存档
  4. 删除data
  5. 中的文件/子文件夹

这样想…

#!/bin/bash

client=name
data=/path/to/$client/data
archive=/path/to/archive/$client

if [ -z "$(ls -A $data)" ]; then
echo "No data to archive"
elif [ -n "$data" ]; then
echo "Archiving data"
find $data -print | zip -j "$(date +"%m-%d-%Y@%T")".zip -@
mv "$(date +"%m-%d-%Y@%T")".zip $archive
rm -vrf "${data:?}/"*
echo "Archive complete"
else
echo "Archive failure. The Slayer rejects your code."
fi

我接近了吗?

不,你的代码不能工作,因为find "$data"-print将打印$data,它是一个文件列表。此外,它将覆盖所有zip,因为所有zip都具有相同的名称(例如20121-01-22 .zip)

你有多个选项,如果你想压缩整个文件夹,并移动到另一个目录:

zip -r $(date +"%d-%m-%Y").zip /path/to/directory-1/
mv $(date +"%d-%m-%Y").zip /path/to/directory-2

如果你想单独压缩每个文件:

#!/bin/bash
data=$(find /path/to/directory-1)
archive=/path/to/directory-2
if [ -z "$data" ]; then
echo "No data to archive"
elif [ -n "$data" ]
then
echo "Archiving data"
for i in $data; do
f=${i////_}
zip "$(date +"%d-%m-%Y")_$f.zip" $i
mv $(date +"%d-%m-%Y")_$f.zip $archive
done
echo "Archive complete"
else
echo "Error"
fi

我已将/file的/path/替换为path_of_file,因为如果不这样做,您无法创建带有"/"的文件。字符。

无论如何,我建议您使用rsync或类似的方法,以便只备份目录中的新文件。

最新更新