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