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

评论

与往常一样,在实际尝试调用rm之前,先使用ls之类的无害命令测试给定的答案。

^这个家伙不喜欢危险地生活.. :)

#1 楼

您可以使用find

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


或bash的扩展globlobing功能:

shopt -s extglob
rm *.!(txt)


或在zsh中:

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


评论


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

–凯文
2013年6月5日15:58

*。!(txt)不应该是!(*。txt)吗?

– Lri
2013年6月6日8:32

@LauriRanta取决于文件夹中的内容,我们尚未得到答案。如果所有文件都带有扩展名,那就很好了,如果有文件夹,rm会阻塞。

–凯文
2013年6月6日13:22

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

– CMCDragonkai
2014年1月17日在8:56

@izogfif检查此发现。型f!名称“ * .txt” | xargs -r rm将在GNU \ xargs中工作。 BSD和UNIX xargs命令可能没有-r,您必须检查本地man xargs

– Ntwobike
18 Jun 8'在7:52



#2 楼

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

文件,然后您可以使用以下文件:

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

#3 楼

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

shopt -s extglob
rm !(*.txt)


评论


如何使用它指定多个扩展名?

–乔丹·麦基(Jordan Mackie)
20年1月28日在16:38

shopt -s extglob功能强大。 tecmint.com/…提供了很好的例子。要删除除某些扩展名以外的所有扩展名,rm -v!(*。zip | * .odt)起作用。

– Martin_W
20/11/23在6:52

#4 楼

可以使用反向grep和xargs

ls | grep -v .txt$| xargs rm


评论


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

– phillipsk
16-2-27在13:32



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

– JigglyNaga
16年7月21日在16:11



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

– Dimitry K
18-11-19的3:31

#5 楼

一个没有find的解决方案:

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


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

#6 楼

只需执行:

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

同样,如果需要删除“一个或多个文件类型以外”,请执行: br /> rm $(ls -I "*.txt" -I "*.pdf" )#删除* .txt和* .pdf
以外的文件类型

评论


欢迎使用StackExchange! -I选项可能有用,但是请查看为什么不解析ls。以及| xargs实现?没有任何参数,它将在所有输入上运行echo。

– JigglyNaga
16年7月21日在15:59

xargs应该实现什么?

– dhag
16年7月21日在16:00

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

–苏里
16年7月22日在22:05

#7 楼

此操作还可以删除除指定的文件(.mydir)以外的所有隐藏(点)文件和文件夹: