linux + 查找 + 删除文件并警告“文件已删除”

linux + 查找 + 删除文件并警告“文件已删除”

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 {} \;

相关内容