您如何运行rm的模拟运行以查看将删除哪些文件?


87

我想看看rm在Linux中执行什么操作会删除哪些文件。大多数命令似乎都具有空运行选项来仅显示此类信息,但我似乎找不到的此类选项rm。这有可能吗?


我还想查看哪些文件会因缺少权限而产生错误。
西蒙·伍德赛德

Answers:


121

假设您要运行:

rm *.txt

您可以运行:

echo rm *.txt

甚至只是:

echo *.txt

查看rm将删除哪些文件,因为它是扩展而*.txt不是的外壳rm

这对您无济于事rm -r

如果您要递归删除文件和目录,则可以使用find代替rm -r,例如

find . -name "*.txt" -print

然后,如果它可以满足您的要求,请将更改-print-delete

find . -name "*.txt" -delete

找到是IMO的不错选择。如果您想使用图形演示文稿tree
2012年

2
几乎完美。find . -name "*.txt" -delete似乎不是递归的。删除了所有文件,但没有删除列出的目录-print
Oscar Godson

1
@OscarGodson假设目录在删除文件后留空,您可以使用find . -type d -empty -delete
datguy

1
@OscarGodson - find不会删除仍包含文件(相当于目录rm dir/-r)。你必须先清空目录-或使用find-exec rm用适当的选项来做到这一点。例如find . -depth -name "*.txt" -exec rm -r {} +
shalomb

使用该echo rm *.txt方法似乎有一个缺点。它将结果显示在串联列表中(一个长字符串,前一个文件之后是一个文件),而不是垂直列表。有什么方法可以使输出显示在垂直列表中(每行一个文件)?(更新:我看到该find方法完成了我所要求的操作。因此,我将继续执行该操作。)
启发

16

你可以说:

rm -i

使其以交互模式运行,因此rm将提示您确认是否应删除每个文件。您可以对每个文件回答否,以查看哪些文件将受到影响。


8
对于大量文件而言,这相当困难。
科里·克莱恩

9
是的 rm -i#评论必须达到最小评论长度
约书亚

4

您可以使用ls列出所有将被删除的文件rm

ls ../path/*.txt

如果您需要列出来查看将以递归方式删除的文件rm,则使用-R带有ls以下标记的标志:

ls -R ../path/*.txt

好点子。尽管如果您知道嵌套的级别,那么可以通过ls */*/*.txt
Veneet Reddy '18

1
你是对的。与-R选项。
Veneet Reddy '18
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.