我想删除任何看起来像wordpress-891.sql
来自当前目录(不在子目录内)的文件。
这会rm wordpress-*.sql
起到作用吗?还是也会从子目录中删除匹配项?
答案1
不,正常的通配符*
不是递归的,也不是rm
。
如果目录名称匹配,则不会删除它 - 您需要标志-r
来删除目录。
因此,如果您确定要删除这些文件,那么这样做是安全的。
您还可以进行rm
互动
rm -i wordpress-*.sql
然后它会在删除每个文件之前要求确认
答案2
是的,它确实帮你解决了这个问题,删除了当前目录中所有具有该架构的文件。不,它不会删除子目录中的文件。
当您运行以下命令时,您不确定会发生什么:
rm wordpress-*.sql
然后使用以下命令运行它ls
:
ls wordpress-*.sql
您在输出中看到的文件就是将被删除的文件。
当您尝试获取类似这样的列表时:foo*
最好使用-d
开关来ls
防止列出名为foobar/
etc的目录中的文件。
ls -d foo*
此技巧适用于不用于递归执行作业的命令。
您可以做的另一件事是键入所需的输入,例如:wordpress-*
然后按Ctrl+ Alt+ *,现在所有匹配项都会自动输入在您的命令前面。
答案3
不,rm
不会通过子目录进行递归。
看删除所有子目录中匹配的文件 - SuperUser了解删除子目录中文件的方法。
如果您担心意外删除重要内容,请使用gvfs-trash
(将文件发送到垃圾箱)而不是rm
(永久删除文件)。
答案4
如果您想查找并删除所有匹配的文件(例如)wordpress-*.sql
,您可以使用find
命令。:)
例如,您想删除所有与 匹配的文件wordpress-*.sql
,test_dir
请执行以下操作。
cd test_dir
find . -name "wordpress-*.sql" -exec rm -f {} \;
每当find
程序真正找到匹配的文件时,它都会尝试执行选项后面的命令-exec
。在这种情况下,rm -f {}
将被执行并{}
更改为匹配文件名。例如
rm -f wordpress-169.sql
您还可以使用选项设置子目录的深度-maxdepth
。
cd test_dir
find . -maxdepth 3 -name "wordpress-*.sql" -exec rm -f {} \;
请注意,您必须-maxdepth
在其他选项之前指定选项。否则您可能会遇到您不想看到的结果。