如何递归删除终端中某些名称的文件

时间:2017-03-17 10:50:46

标签: terminal rm

我想从子文件夹中删除所有emacs备份(〜)文件。 我知道我可以在每个文件夹中cd并使用rm *~删除它们(例如,备份文件test.cpp~)。

如何使用一个命令删除这些文件,而不是在每个文件夹中使用cd?

(我尝试了rm -r *~rm -rf *~,但它们似乎无效)

4 个答案:

答案 0 :(得分:3)

您可以使用findexec执行此操作。这是一个做你想做的事的例子:

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 *'-删除

以上命令将在文件夹匹配模式中递归查找文件,并仅删除文件