我有一个具有不同修改时间的文件列表,1_raw,2_raw,3_raw ...我想查找超过10天前修改过的文件并将其压缩以释放磁盘空间。但是,命令:
find . -mtime +10 |xargs tar -cvzf backup.tar.gz
将创建一个新文件backup.tar.gz
我想要的是为每个文件创建一个tarball,以便我可以在需要时轻松解压缩每个文件。命令后,我的文件应该是:1_raw.tar.gz,2_raw.tar.gz,3_raw.tar.gz ......
有没有这样做?谢谢!
答案 0 :(得分:1)
这样的事情就是你所追求的:
find . -mtime +10 -type f -print0 | while IFS= read -r -d '' file; do
tar -cvzf "${file}.tar.gz" "$file"
done
添加了-type f
,因此它不会处理目录,只处理文件。
这会在所有子目录中添加10天前修改过的每个文件的压缩归档,并将压缩归档放在其各自的归档版本旁边(在同一文件夹中)。我认为这就是你想要的。
如果你不需要处理路径中的空格,你可以简单地做:
for f in $(find . -mtime +10 -type f) ; do
tar -cvzf "${f}.tar.gz" "$f"
done
答案 1 :(得分:0)
简单地尝试一下
$ find . -mtime +10 | xargs -I {} tar czvf {}.tar.gz {}
此处,{}表示replace-str -我替换-str 将初始参数中出现的replace-str替换为从标准输入中读取的名称。同样,未加引号的空格也不会终止输入项目。相反,分隔符是换行符。表示-x和-L 1。 https://linux.die.net/man/1/xargs