我尝试编写一个 bash
脚本,用于压缩早于 X 天的文件,并在压缩后删除未压缩的版本。我尝试了以下代码,但它无法正常工作。
find /home/randomcat -mtime +11 -exec gzip {}\ | -exec rm;
gzip
将删除未压缩的文件(因为它用压缩的变体替换了它)。而且你不希望它在除纯文件(不在目录或设备上,也不在符号链接上)以外的任何内容上运行。
所以你至少需要:
find /home/randomcat -mtime +11 -type f -exec gzip {} \;
您甚至可能希望find(1)避免具有多个硬链接的文件。您可能还希望在运行命令之前询问它。那么,您可以尝试:
find /home/randomcat -mtime +11 -type f -links 1 -ok gzip {} \;
find
命令配合-exec
或-ok
使用需要分号(或加号),您需要从shell中escape分号;
。您可以使用';'
代替\;
来quote它...
如果使用+
,find
命令将把多个参数(传递给单个gzip
进程)分组,因此运行的进程较少(但它们会持续更长时间)。因此,您可以尝试使用:
find /home/randomcat -mtime +11 -type f -links 1 -exec gzip -v {} +
|
所建议的那样)。find /home/randomcat -mtime +11 -type f -links 1 \
-exec printf "gzip %s &\n" {} \; | bash -x
但实际上,您不会大幅加快处理速度。
| -exec rm;
的东西? - harcotlupus|
。这是错误的。请注意,我的建议中没有使用任何 |
。 - Basile Starynkevitchfind /home/randomcat -mtime +11 -exec gzip {} +
find /home/randomcat -mtime +11 -exec gzip {} +
命令后,在/home/randomcat目录中,你将看到a.gz、b.gz、c.gz,而不是a、b、c。find
需要一个分号,并且应该进行转义以避免被shell处理。 - Basile Starynkevitchfind ... +
和find ... \;
之间的区别的好回答:https://askubuntu.com/a/558819/329317 - AntonioKfind /location/location -type f -ctime +15 -exec mv {} /location/backup_location \;
这将帮助您找到所有文件并移动到备份文件夹
man find
和man gzip
来获取帮助。 - Basile Starynkevitch|
符号有误。 - Basile Starynkevitch