我如何使用 rm 删除所有不带特定通配符的文件?

我如何使用 rm 删除所有不带特定通配符的文件?

使用rm *text*它可以删除所有包含特定字符串的文件。我该如何做才能删除所有文件除了对于具有特定通配符的那些?

我尝试使用我发现的其他东西,例如:

find . -type f -print0 | xargs --null grep -Z -L 'text' | xargs --null rm

或者

grep -r -L -Z 'text' . | xargs --null rm

但这些不起作用。相反,它们会删除给定目录中的所有文件。

我怎样才能做到这一点?

答案1

您可以通过启用扩展 glob 来实现这一点:

shopt -s extglob

现在你可以这样做

ls !(*.pdf)

或者在你的例子中

rm !(*text*)

答案2

find

find . -type f -not -name "*text*" -exec rm {} \;

*text*请注意,这将删除当前文件夹及其子文件夹中所有与指定模式()不匹配的文件。

如果您只需要删除当前文件夹中的文件,则可以使用以下标志-maxdepth 1

find . -maxdepth 1 -type f -not -name "*text*" -exec rm {} \;

相关内容