我想从子文件夹中删除所有emacs备份(〜)文件。
我知道我可以在每个文件夹中cd
并使用rm *~
删除它们(例如,备份文件test.cpp~)。
如何使用一个命令删除这些文件,而不是在每个文件夹中使用cd?
(我尝试了rm -r *~
和rm -rf *~
,但它们似乎无效)
答案 0 :(得分:3)
您可以使用find
和exec
执行此操作。这是一个做你想做的事的例子:
find -name '*~' -exec rm {} \;
让我们分解一下这是如何运作的。 find
命令将通过它执行的目录递归,默认情况下会打印出它找到的所有内容。使用-name '*~'
告诉我们只选择名称与正则表达式*~
匹配的条目。我们必须引用它,否则shell可能会为我们扩展它。使用-exec rm {}
会为找到的每件事执行rm
,{}
作为文件名的占位符。 (最终;
是告诉find
这是命令结束的必要条件。这不是什么大问题,但是如果你不使用它会发出呜呜声并且什么都不做。{ {1}}是逃避它,因为\
是一个特殊的shell字符。)
答案 1 :(得分:0)
你会使用find:
find ./ -name *~ -exec rm {} \;
此命令将递归列出与为名称指定的模式匹配的所有文件。然后它将执行为每个命令提供的命令,用文件名替换花括号。
唯一棘手的部分是分号,因为它正在关闭命令,但必须保护它不受bash的影响,因此反斜杠。
有关更多选项,请参阅https://linux.die.net/man/1/find。
答案 2 :(得分:0)
首先,删除这些文件的最佳方法是不创建它们(或者更确切地说,在中心位置创建它们):https://stackoverflow.com/a/151946/245173
这是一种使用Emacs中的find
来收集文件列表并有选择地对它们进行操作的方法。 M-x find-name-dired RET /path/to/files RET *~ RET
应获取/path/to/files/
下的所有备份文件,并将它们放在备用缓冲区中。然后,您可以使用m
执行标记文件等常规操作,使用t
反转选择,并使用D
删除选择。
答案 3 :(得分:0)
找到/ path / to / directory / -type f -name'* filtercondition *'-删除
以上命令将在文件夹匹配模式中递归查找文件,并仅删除文件