如何删除文件名中包含数字“3”或“2”的文件?

如何删除文件名中包含数字“3”或“2”的文件?

我目前正在尝试删除一些文件。我想删除的文件包含数字 3 或 2,或者两者或其中一个。

我如何删除包含这些数字的文件?

文件命名如下:

K-0_0_1_1_1_1_1_0.wav
K-0_0_1_1_1_1_1_1.wav
K-0_1_0_0_0_0_0_0.wav
K-0_1_0_0_0_0_0_1.wav
K-0_1_0_0_0_0_1_0.wav
K-0_0_0_0_0_0_0_2.wav
K-0_0_0_0_0_0_0_3.wav
K-0_0_0_0_0_0_1_2.wav

在此列表中,应该删除最后三个文件。

答案1

对于当前目录,您可以使用:

rm -- *[23]*

如果要限制它,仅匹配 2 或 3 必须出现在K和之间的文件.wav

rm K*[23]*.wav

如果您想通过强制rm要求确认每个文件来使其更安全,请使用-i交互式标志:

rm -i K*[23]*.wav

###笔记

  • shell glob*匹配任意数量(包括零个)的任意字符
  • 对于 shell 来说[some chars]是一个字符类 - 里面的任何内容都可以匹配
  • --被识别为rm选项的结尾。这可以避免任何文件名以 开头时的错误-;否则文件名可能会被解释为选项

如果你需要避免匹配,,,,22你需要一些更复杂的东西,比如233233αғsнιη 的回答

答案2

您可以使用 shell globs:

rm *2* *3*

*2*这将删除当前工作目录中与或glob匹配的所有文件(不是目录)*3*

在这些全局变量中,“”*始终表示“任意数量(包括零个)的任意字符”。

.但请注意,IIRC Bash 的 glob默认不匹配隐藏文件(文件名以 开头)。

答案3

对于当前目录或任何其他位置:

  1. 运行此命令来查看要删除的内容:

    find . -type f -iname "*[32]*.wav" 
    
  2. 然后使用以下命令删除:

    find . -type f -iname "*[32]*.wav" -delete
    

更多信息:

  • .表示当前目录,也可以是文件位置的路径,例如/path/to/files
  • 为了防止find移动到预期目标中的任何目录,请使用选项-maxdepth 1,因此:
    • find . -maxdepth 1 -type f -iname "*[32]*.wav" -delete
  • 如果在目标目录中则使用:
    • find . -maxdepth 1 -type f -iname "*[32]*.wav" -delete

警告

千万不要这样做find . -delete -type f -iname "*[32]*.wav",否则所有(您的文件)都将被删除!

答案4

我是的粉丝xargs,它允许在运行命令之前进行预览:

$ echo *2* *3*
(list of files with 2 or 3 in name)

这只是 shell glob 测试(在 bash 中有效),如果列表正确,则将其通过管道传输到 xargs:

$ echo *2* *3* | xargs rm -v

选项-v列出rm要删除的文件。您可以更加谨慎,并添加选项,-i以便-v每次删除时都会提示。

相关内容