find
我们可以使用部分文件名删除文件
find -type f -name '*file_name*' -delete
我需要在上述语法中添加什么才能以完整文件名打印文件已删除的消息?
答案1
只需添加-print
选项
find -type f -name '*file_name*' -print -delete
或者在删除前需要确认的情况下使用-ok
(对每个文件进行确认)
find -type f -name '*file_name*' -ok rm -- {} \;
答案2
find
可以采取多个“动作”,事实上,它们也都起到了条件的作用。与where代表的-name "*something*" -delete -print
相同-name "*something*" -a -delete -a -print
-a
和,并且它的工作原理与 C 中的运算符相同的短路逻辑&&
,因此后一个命令/操作/测试仅在前一个命令/操作/测试成功时才运行。
因此,-delete -print
将打印实际删除的文件的名称:
$ mkdir test test/ro ; touch test/foo.txt test/ro/bar.txt; chmod 555 test/ro
$ find test -name "*.txt" -delete -print
find: cannot delete ‘test/ro/bar.txt’: Permission denied
test/foo.txt
如果我们使用-print -delete
,那么首先会进行打印,并且find
还会输出无法删除的文件的名称。
或者,如果您想要更详细的输出(GNU find):
$ find test -name "*.txt" -delete -printf 'deleted: %p\n'
我们甚至可以这样做,为已删除和未删除的文件获取不同的消息(但当然,通常的错误消息使这有点多余):
$ find test -name "*.txt" \( -delete -printf 'deleted: %p\n' -o
-printf "could not delete: %p\n" \)
答案3
如果您想在删除时显示完整的文件名以及如果您想在删除之前显示完整的文件名
find . -type f -iname "*file_name*" -print -exec rm -rvf {} \;