linux - 压缩早于 X 的文件并在删除旧文件后的声明

标签 linux bash

尝试执行一个 bash 脚本,它将压缩早于 X 的文件,并在压缩后删除未压缩的版本。尝试过类似的方法,但它不起作用。

find /home/randomcat -mtime +11 -exec gzip {}\ | -exec rm;

最佳答案

默认情况下,gzip将删除未压缩的文件(因为它用压缩变体替换它)。而且您不希望它在纯文件以外的任何其他内容上运行(不在目录或设备上,不在符号链接(symbolic link)上)。

所以你至少要

 find /home/randomcat -mtime +11 -type f -exec gzip {} \;

你甚至可以想要 find(1)避免带有多个 硬链接(hard link)的文件。您可能还希望它在运行命令之前询问您。那么你可以试试:

find /home/randomcat -mtime +11 -type f -links 1 -ok gzip {} \;

带有-exec-okfind 命令需要分号(或+ 符号),你需要 escape那个分号 ; 来自你的 shell .您可以使用 ';' 而不是 \;quote它...

如果您使用 +find 命令会将多个参数分组(到单个 gzip 进程),因此将运行更少的进程(但它们会持续更长时间)。所以你可以试试

 find /home/randomcat -mtime +11 -type f -links 1 -exec gzip -v {} +

您可能想阅读更多关于 globbing 的信息以及外壳如何works .

顺便说一句,你不需要任何 command pipeline (正如您在问题中错误使用 | 所暗示的那样)。

您甚至可以考虑使用 GNU parallel并行运行事物,或使用例如提供一些 shell(带有后台作业)

find /home/randomcat -mtime +11 -type f -links 1 \
  -exec printf "gzip %s &\n" {} \; | bash -x

但实际上您不会加快处理速度。

关于linux - 压缩早于 X 的文件并在删除旧文件后的声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47013001/

相关文章:

python - 有没有python模块来解析Linux的sysfs?

linux - 使用 sed 在文件中插入另一个 sed 命令

linux - PostgreSQL 12 - "base"目录中的大型缓存文件

c - 如何检查打开的文件是否已被另一个进程移动或删除

linux - 关于Linux命令 "find -exec {}"的问题

linux - JavaFX 应用程序包版本号

bash - 带有 bash 和 applescript 的字符串文字

regex - 根据文件名中的时间戳值复制文件

linux - 用sed替换多行变量

linux - 如何检查 sed 命令是否替换了一些字符串?