Answers:
您无需导航至目录,只需使用
rm /some/dir/*.xvg
如果路径中有错别字或类似错误,则/ som / dir不存在:
cd /som/dir
rm *.xvg
会意外删除当前目录中的所有.xvg文件。第一个命令不会,并且您不需要再次CD。
另一种方法是使用find:
find /some/dir/ -maxdepth 1 -type f -name "*.xvg" -delete
是的,rm *.xvg
只会删除.xvg
当前目录中以结尾的文件。这就是为什么。
当您键入这样的命令时,工作将在您正在使用的shell(假设bash)和命令二进制文件之间进行分配。
您可以通过键入找到二进制文件which rm
。这个小程序负责取消链接文件。这样的程序可以从命令行启动,并且可以prog arg1 arg2 arg3
在启动时读取参数列表。对于rm
,它们被解释为要删除的标准文件名列表。因此,如果您在包含该文件的目录中foo.bar
,则键入delete 'foo.*'
将导致rm: foo.*: No such file or directory
。注意文件模式周围的单引号,它们告诉Shell将参数原样传递给Shell。
但是,如果您输入rm *.bar
相同的目录,它将删除该文件。这里发生的是,您的shell(您用来输入命令的程序)在将参数传递给命令之前正在执行一些转换。其中之一称为“文件名扩展”,否则称为“ globbing”。您可以在此处看到bash文件名扩展的列表。最常见的扩展之一是*
,它被扩展为当前目录中的文件名。
查看工作中的glob的一种简单方法是使用echo
,它打印回通过外壳传递给它的所有参数。因此echo *
,在同一目录中键入将输出foo.bar
。因此,当您键入时rm *.bar
,实际发生的是外壳将参数列表扩展为foo.bar
,然后将其传递给rm
命令。
有一些控制globbing的方法。例如,在最新版本的bash中,您可以打开一个名为globstar的选项,它将进行递归扩展。键入echo **/*.bar
将显示.bar
以所有子文件夹结尾的所有文件的列表。因此,键入rm **/*.bar
启用了globstar的bash确实会递归删除子文件夹中的所有匹配文件。
rm -f {*.xvg,.*.xvg}
还要删除隐藏文件。并rm -R -f {*.xvg,.*.xvg}
删除目录。