如何删除特定文件夹中具有特定扩展名的所有文件?

如何删除特定文件夹中具有特定扩展名的所有文件?

如果我将当前/工作目录(使用导航到它cd)设置为某个特定目录,然后键入:

rm *.xvg

这个命令会做什么?上面的命令是否真的会仅有的删除扩展名的文件.xvg 仅有的在工作目录中?

在询问之前我对尝试这个感到紧张,因为我想绝对确定上面的命令只会删除.xvg文件位于工作目录中

答案1

是的,rm *.xvg仅有的删除目录下指定扩展名的文件当前的目录。

A好的确保您确实位于要删除文件的目录中的方法是使用pwd将显示当前目录的命令,然后执行操作ls来验证您是否找到了所需的文件。

如果您对发出该命令有点担心rm,您可以执行以下两件事:

  1. 键入ls *.xvg以查看受此命令影响的文件的列表。

  2. 除非你有一个很多文件的数量,您也可以始终使用-i命令行开关 for rm(也存在于cpmv)。使用时rm -i *.xvg会提示您输入每个单独的文件(如果可以删除它),因此您可以确保没有任何意外的内容被删除。 (如果你有很多文件,这会很乏味:)

答案2

您不需要导航到目录,只需使用

rm /some/dir/*.xvg 

如果路径中有拼写错误或类似错误,其中 /som/dir 不存在:

cd /som/dir
rm *.xvg

会意外删除当前目录中的所有 .xvg 文件。第一个命令不会,并且您不需要再次 cd 返回。

另一种方法是使用 find:

find /some/dir/ -maxdepth 1 -type f -name "*.xvg" -delete 

答案3

是的,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(您用来输入命令的程序)在将参数传递给命令之前正在执行一些转换。其中之一称为“文件名扩展”,也称为“通配符”。您可以看到 bash 文件名扩展列表这里。最常见的扩展之一是*,它扩展为当前目录中的文件名。

查看工作中的 glob 的一个简单方法是使用echo,它会打印回通过 shell 传递给它的所有参数。因此echo *在同一目录中输入将输出foo.bar.因此,当您键入 时rm *.bar,实际发生的情况是 shell 将参数列表扩展为foo.bar,然后将其传递给rm命令。

有一些控制通配符的方法。例如,在最新版本的 bash 中,您可以打开一个名为 globstar 的选项,该选项将进行递归扩展。键入echo **/*.bar将显示以所有子文件夹结尾的所有文件的列表.bar。因此,输入rm **/*.bar启用 globstar 的 bash 确实会递归删除子文件夹中的所有匹配文件。

答案4

命令 :

  rm ./*.pgm

为我工作

命令:

rm *.pgm

给出错误命令(波兰语,翻译):

rm: wrong option - '1'
Use "rm ./-1000.pgm" to delete the file '-1000.pgm'.
Write "rm --help" for information.

bash --version
GNU bash, wersja 4.4.19(1)-release (x86_64-pc-linux-gnu)

相关内容