在linux中,如何删除除*.txt模式之外的所有文件?

在linux中,如何删除除*.txt模式之外的所有文件?

我知道如何删除txt当前目录下的所有文件rm *.txt。有谁知道如何删除当前目录中除文件之外的所有文件txt

答案1

您可以使用find

find . -type f ! -name '*.txt' -delete

或者 bash 的扩展通配符功能:

shopt -s extglob
rm *.!(txt)

或者在 zsh 中:

setopt extendedglob
rm *~*.txt(.)
#  ||     ^^^ Only plain files
#  ||^^^^^ files ending in ".txt"
#  | \Except
#   \Everything

答案2

如果你只想删除全部文件除了 '*.txt' 之外,您可以使用以下命令:

$ find . -type f ! -name "*.txt" -exec rm -rf {} \;

但如果你也想删除目录连同文件然后你可以使用这个:

$ find . ! -name "*.txt" -exec rm -r {} \;

答案3

有很多方法可以做到这一点。但最简单的方法是(bash):

shopt -s extglob
rm !(*.txt)

答案4

一种解决方案没有find

mv dir/*.txt otherdir/
rm -r dir
mv otherdir dir

这应该适用于所有类型的 shell。

相关内容