我有一个不同修改时间的文件列表,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.
有这样的事吗?谢谢!
发布于 2014-09-08 11:15:07
就像你想要的那样:
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发布于 2019-02-27 01:46:12
简单地,试试这个
$ find . -mtime +10 | xargs -I {} tar czvf {}.tar.gz {}这里,{}指示替换-str- -I替换-str替换在初始-参数中出现的替换-str,其中包含从标准输入读取的名称。此外,没有引号的空格不会终止输入项;相反,分隔符是换行符。意味着-x和-L 1. https://linux.die.net/man/1/xargs
https://stackoverflow.com/questions/25722928
复制相似问题