我有以下命令,列出所有扩展名为doc
、docx
等的文件。
find . -maxdepth 1 -iname \*.doc\*
该命令返回了许多文件,其中一些我想删除。例如,返回的结果是
- 示例.docx
- 虚拟数据.doc
- 示例.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
一旦您确定要删除正确的文件,就可以删除。但恐怕手动删除文件会更简单。