尝试执行一个 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
或-ok
的find
命令需要分号(或+
符号),你需要 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/