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


73

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


20
与往常一样,像ls在实际尝试调用之前一样,使用无害的命令测试给定的答案rm
chepner 2013年

Answers:


111

您可以使用find

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

或bash的扩展globing功能:

shopt -s extglob
rm *.!(txt)

或在zsh中:

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

其中的某些可能需要修改,具体取决于您是否有文件夹以及要使用它们做什么。
凯文

1
*.!(txt)应该!(*.txt)吗?
Lri 2013年

@LauriRanta取决于文件夹中的内容,我们尚未得到答案。没关系,如果所有文件都具有扩展名,并且rm如果有文件夹,它会阻塞。
凯文

我的括号有问题。当我在bash脚本中使用globbing样式时,它抱怨语法错误和括号。但是,通过CLI可以执行此操作。
CMCDragonkai 2014年

1
@izogfif检查find . -type f ! -name "*.txt" | xargs -r rm是否可以在GNU \ xargs中使用。BSD和UNIX xargs命令可能没有-r,您必须检查本地man xargs
Ntwobike

10

如果只想删除“ * .txt”以外的所有文件,则可以使用以下命令:

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

但是,如果您还想删除目录和文件,则可以使用以下命令:

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


9

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

shopt -s extglob
rm !(*.txt)

4

一种解决方案,没有find

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

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


3

您可以使用倒置的grep和xargs

ls | grep -v .txt$| xargs rm

ls | grep -v *.txt | xargs rm效果也一样
phillipsk

@phillipsk grep -v *.txt仅在只有一个.txt文件的情况下才起作用。如果没有,grep*.txt用作模式;否则,将用作模式。如果有多个文件,它将在所有其他.txt文件中搜索第一个文件名,而忽略的输出ls。(确切的结果可能取决于外壳的glob选项。)
JigglyNaga

.txt$将匹配txt以点末结尾的字符串。因为grep以正则表达式为参数。因此,文件a.txtaatxta-txt都将受到这个表达式匹配。正确的表达应为ls | grep -v \\.txt$ | xargs --no-run-if-empty rm。对于好奇的人:如果您想安全地使用该表达式ls | grep \\.txt$ | xargs --no-run-if-empty echo,请使用此测试表达式(请注意:没有-v标记和rm=>echo)。注意2:您可能已经注意到双反斜杠。一个用于正则表达式,另一个用于bash逃脱斜线。
Dimitry K '18

1

只需做:

rm $(ls -I "*.txt" ) #删除* .txt以外的文件类型

同样,如果需要删除“一个或多个文件类型以外”,请执行以下操作:

rm $(ls -I "*.txt" -I "*.pdf" ) #删除* .txt和* .pdf以外的文件类型


欢迎使用StackExchange!该-I选项可能有用,但是请查看为什么不解析ls| xargs取得了什么成就?没有任何参数,它仅echo在其所有输入上运行。
JigglyNaga

什么是xargs应该实现的呢?
dhag

谢谢,xargs在上述情况下没有用,现已更正。
苏里亚

0

这也可以删除除指定的一个()以外的所有隐藏(点)文件和文件夹.mydir

rm -rf $(ls -aI ".mydir")
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.