linux - 在 Linux 中为每个文件查找和 tar

标签 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...

有没有办法做到这一点?谢谢!

最佳答案

这样的事情就是您所追求的:

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

关于linux - 在 Linux 中为每个文件查找和 tar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25722928/

相关文章:

linux - Python 3 - 无法接收 IPv6 数据包(UDP - linux)

c++ - 在 List c++ 中查找元素

bash - 找到,xargs : execute chain of commands for each file

regex - Unix 查找通配符目录结构

linux - tar 命令选项有多大

linux - 为什么我在 shell 中读取 fifo 时出错?

c - epoll_wait中 "events"指针分配多少内存

swift - 如何在 Process() 中包含命令修饰符?

c - 如何使用 http post 传输 tar.gz 文件?

c++ - 部署后的 Linux qt 应用程序 - 符号查找错误 : libQt5Core. so.5 undfined symbol: uncv_getDefaultName_56