在Linux中查找每个文件并进行tar

时间:2014-09-08 11:09:50

标签: linux find tar

我有一个具有不同修改时间的文件列表,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 ......

有没有这样做?谢谢!

2 个答案:

答案 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