我正在尝试创建一个删除早于X天的Linux机器上的文件的作业。非常简单:
find /path/to/files -mtime +X -exec rm {}\;
问题是我的所有文件都有特殊字符b / c它们是来自网络摄像头的图片 - 大多数都包含括号,所以上面的命令失败了"没有这样的文件或目录"。
答案 0 :(得分:1)
你试过这个:
find /path/to/files -mtime +X -exec rm '{}' \;
或者也许:
rm $(find /path/to/files -mtime +X);
甚至使用xargs
代替-exec
的方法:
find /path/to/files -mtime +X | xargs rm -f;
xargs
的另一个转折是使用-print0
,这将有助于脚本区分文件名和空格中的空格。使用ASCII null
字符作为文件分隔符返回列表之间的空格:
find /path/to/files -mtime +X -print0 | xargs -0 rm -f;
或man find
在-print0
下解释:
This primary always evaluates to true. It prints the pathname of
the current file to standard output, followed by an ASCII NUL
character (character code 0).
我还建议添加-maxdepth
和-type
标志,以便更好地控制脚本的功能。所以我会将它用于干运行测试:
find /path/to/files -maxdepth 1 -type f -mtime +1 -exec echo '{}' \;
-maxdepth
标志控制find
向下执行的目录数量,-type
将搜索限制为文件(又名:f
),因此脚本专注于仅限文件。这只是echo
结果。然后,当您对此感到满意时,请将echo
更改为rm
。
答案 1 :(得分:0)
确实
find /path/to/files -mtime +X -print | tr '()' '?' | xargs rm -f
工作?