.bak
)?简而言之,我怕使用rm
,因为我曾经用错它,现在我需要建议。#1 楼
如果您担心的话,甚至不需要使用rm
。使用find
:find . -name "*.bak" -type f -delete
,但要谨慎使用。首先运行:
find . -name "*.bak" -type f
以确切查看要删除的文件。
此外,请确保
-delete
是命令中的最后一个参数。如果将其放在-name *.bak argument
之前,它将删除所有内容。有关更多信息,请参见
man find
和man rm
,另请参见SE上的以下相关问题:如何如何从项目中删除所有.pyc文件?
评论
与rm * .bak有什么不同?
–sayantankhan
13年15月15日在13:11
@ Bolt64您的rm * .bak不适用于子目录。
– RaduRădeanu
2013年11月15日13:14
使用默认设置rm * .bak将仅删除当前目录中所有以.bak结尾的文件。要在子目录中执行某些操作,您可能需要弄乱glob,使用-r选项或使用find示例。
–亨尼斯
13年15月15日在13:14
@Hennes请注意rm -r * .bak!它还会删除所有以.bak结尾的目录及其所有内容。
– RaduRădeanu
13年11月15日13:34
确保-delete是命令中的最后一个参数。如果将其放在-name * .bak参数之前,它将删除所有内容。
–迈克尔
2014-10-29 14:36
#2 楼
find . -name "*.bak" -type f -print0 | xargs -0 /bin/rm -f
评论
欢迎来到askubuntu!虽然这是一个非常有效的答案,但我认为使用它代替find的-delete标志没有任何好处。可以在GNU手册条目中找到更多信息,以使用find删除文件。
–谷氨酸
2014年4月4日20:11在
您可能是对的,这只是替代解决方案,也许更原始;)
–旅行者
2014年4月4日在22:13
这不仅是一个替代方案,而且是一个示例如何将其他命令与管道“ |”组合在一起的示例。 +1
–鲍里斯·帕夫洛维奇(BorisPavlović)
2014年6月5日7:18
此替代解决方案可用于其他缺少-delete的环境(例如cygwin)
– ciriarte
2014年8月15日下午4:07
我认为这是最好的答案。
–LéoLéopoldHertz준영
15年6月29日在11:27
#3 楼
首先运行命令shopt -s globstar
。您可以在命令行上运行该命令,它仅在该shell窗口中有效。您可以将其放在.bashrc
中,然后所有新启动的Shell都会将其拾取。该命令的作用是递归地使**/
与当前目录及其子目录中的文件匹配(默认情况下,**/
与*/
含义相同:仅在直接子目录中)。然后:rm **/*.bak
(或
gvfs-trash **/*.bak
或你有什么)。评论
谢谢作品👍️🙏️❤️
–ARIF MAHMUD RANA
19/12/5在15:54
#4 楼
对我来说,删除文件不是您应该使用rm
的东西。这是一个替代方案:sudo apt-get install gvfs # install a tool that allows you to put stuff in the trash
alias "trash"="gvfs-trash" # you can also put this in .bash_aliases or simply use the command without alias
trash *.bak # trash the files (thus moving them to the trash bin)
正如Flimm在评论中指出的那样:
软件包
trash-cli
与gvfs-trash
具有相同的功能无需依赖gvfs。 因此:
sudo apt-get install trash-cli
您无需为此设置别名,因为
trash-cli
软件包提供了一个命令trash
可以满足我们的需求。正如Eliah Kagan在大量评论中明确指出的那样,您还可以使用
find
进行递归。在这种情况下,您不能使用别名,因此以下命令假定您已经安装了trash-cli
。我总结一下Eliah的评论:此命令在当前目录或其子目录中或以下的任何位置查找并显示所有
.bak
文件和符号链接。 find . -name '*.bak' -xtype f
要删除它们,请在
-exec
命令后附加一个trash
:find . -name '*.bak' -xtype f -exec trash {} +
-xtype f
选择文件并符号链接到文件,但不链接到文件夹。要删除.bak文件夹,也请删除该部分,并使用-execdir
,这样可以避免cannot trash non-existent
目录中的.bak
文件出现.bak
错误:find . -name '*.bak' -execdir trash {} +
评论
“不要使用rm删除事物”是一个有争议的说法,但我必须同意,使用可以让您撤消事物的事物通常更明智。
–奥利♦
13年15月15日在15:12
不依赖于gvfs的情况下,rash-cli软件包的功能与gvfs-trash相同。
– Flimm
13年11月20日在9:08
我已经在答案中对其进行了编辑,下次您可以自己进行编辑。
– don.joey
13年11月20日在10:06
@ don.joey这个答案似乎说find。 -name“ * .bak” -type f显示* .bak删除的垃圾。那真的是你的意思吗?您可以使用垃圾桶或gvfs-trash将目录移动到垃圾桶,但是垃圾桶* .bak仅会移动名称以.bak结尾并且立即位于当前目录中的文件和目录。外壳程序会扩展* .bak,因此,垃圾箱* .bak不会影响子目录(其自身名为.bak)中的.bak文件。
– Eliah Kagan
17-10-14在2:30
@ don.joey是ls * .bak(我想您的意思是)列出了什么垃圾* .bak垃圾。找 。 -name'* .bak'-xtype f -exec垃圾{} +将所有.bak文件丢弃在..下的任何位置。它不能使用别名,因此请安装垃圾桶cli或编写gvfs-trash。这是一个例子。 -xtype f选择文件和文件的符号链接,但不选择文件夹。要也删除.bak文件夹,请使用find。 -name'* .bak'-execdir垃圾{} +,可避免无法为.bak目录中的.bak文件垃圾不存在的错误。请随时在您的答案中使用任何一个。
– Eliah Kagan
17-10-14在19:15
#5 楼
如果要删除某个类型的所有文件,但是从当前文件夹中仅删除1个“ deep”文件夹:-maxdepth 2,因为当前目录为“。 ”算作第一个文件夹。
#6 楼
快速解答:递归删除所有具有所考虑名称或后缀的文件:
find . -name '*.pyc' -type f -delete
>以递归方式删除所有具有所考虑名称的目录:
find ~ -path '*/__pycache__/*' -delete
find ~ -type d -name '__pycache__' -empty -delete
有些不太严格的控制,但在一行中:
find ~ -path '*/__pycache__*' -delete
[注意]:
d
是目录选项,f
是文件选项。#7 楼
如果要在删除文件之前检查列表,可以回显它。find . -name "*.bak" -type f | xargs echo rm -rf
这将列出通过rm命令传递的搜索结果通过xargs。
一旦确定列表,就可以在上面的命令中放置echo。
find . -name "*.bak" -type f | xargs rm -rf
评论
添加-print0是一个好习惯| xargs -0处理角文件名,示例测试为您提供xargs:不匹配的单引号;缺省情况下,除非您使用-0选项,否则xargs的引号是特殊的,否则带换行符的文件名将中断。
–bac0n
19-11-25在7:02
评论
相关文章-如何使用通配符递归删除目录?