如何使用 Linux 中的 find 命令从一组结果中删除特定文件?

如何使用 Linux 中的 find 命令从一组结果中删除特定文件?

我有以下命令,列出所有扩展名为docdocx等的文件。

find . -maxdepth 1 -iname \*.doc\*

该命令返回了许多文件,其中一些我想删除。例如,返回的结果是

  1. 示例.docx
  2. 虚拟数据.doc
  3. 示例.doc

我想删除 Sample.doc 和 Dummydata.docx。如何使用选项删除文件-exec。我是否可以传入文件的名称,例如,rm Dummydata.docx Sample.doc因此命令如下所示

find . -maxdepth 1 -iname \*.doc\* -exec rm Dummydata.docx Sample.doc

我可以传递 rm 中的文件名称吗{} after?例如

find . -maxdepth 1 -iname \*.doc\* -exec rm {Dummydata.docx} Sample.doc

有没有更好的方法呢?

答案1

如果您事先知道文件的名称,那么立即删除它们会更容易:

find . -iname "Dummydata.doc" -delete

或者,有多个条件:

find . \( -iname "Dummydata.doc" -o -iname "Sample.doc" \)

括号强制优先,但您需要对其进行转义或引用,因为通常括号对您的 shell 具有特殊含义。


否则,如果您想先检查结果列表,则可以将找到的文件的路径(此处输入)传递{}sh。对于sh命令,路径将变为$0,您可以将其与要删除的文件的名称进行比较:

find . -maxdepth 1 -iname "*.doc" \
-exec sh -c 'if [ "$0" == "Dummydata.doc" ] || [ "$0" == "Sample.doc" ]; then echo rm "$0"; fi' {} \;

在这里,echo一旦您确定要删除正确的文件,就可以删除。但恐怕手动删除文件会更简单。

相关内容