我有一个简单的需求,即递归查找并删除特定扩展名的文件。因此,我有语法可以查找并删除文件并将它们通过管道传输到xargs -0 rm
,但我似乎无法创建已删除文件的日志。
到目前为止我所拥有的:
find /var/www/html -type f -regex ".*/.*\.(png|jpg)" -print0 |xargs -0 rm
答案1
rm
删除文件时通常是静默的。如果您想创建显示已删除文件的日志,请添加该-v
选项。因此,替换:
xargs -0 rm
和:
xargs -0 rm -v >log
答案2
您可以使用find
它本身来删除文件,同时将它们的名称写入标准输出:
find /var/www/html -type f -regex ".*/.*\.\(png\|jpg\)" -delete -print >logfile
笔记:-delete
和选项的顺序-print
很重要。仅当第一个选项返回 true 时才会应用第二个选项,即如果第一个-delete
选项无法删除文件,则其名称将不会打印到标准输出。如果你放在-print
前面,那么它会将文件名放入标准输出,无论是否-delete
真的可以删除该文件。
笔记2:我必须转义括号和垂直线才能使正则表达式默认与我的系统的find
util 一起工作。或者,您可以指定-regextype
为posix-egrep
,例如。无论如何,值得首先尝试find
不带选项的命令-delete
来检查它是否正确找到文件:
find /var/www/html -type f -regex ".*/.*\.\(png\|jpg\)" -print