I a*_*Fat 5 command-line files rm
我目前正在尝试删除一些文件。我要删除的文件包含数字 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
Run Code Online (Sandbox Code Playgroud)
在此列表中,应删除最后三个文件。
Zan*_*nna 20
对于当前目录,您可以使用:
rm -- *[23]*
Run Code Online (Sandbox Code Playgroud)
如果你想限制它,只匹配 2 或 3 必须出现在K和之间的文件.wav:
rm K*[23]*.wav
Run Code Online (Sandbox Code Playgroud)
如果您想通过强制rm要求对每个文件进行确认来使其更安全,请使用-i交互式标志:
rm -i K*[23]*.wav
Run Code Online (Sandbox Code Playgroud)
###笔记
*匹配任意数量(包括零)的任意字符[some chars]是一个字符类 - 里面的任何东西都可以匹配--被识别rm为选项的结束。如果任何文件名以-;开头,这将避免错误。否则文件名可能被解释为一个选项如果您需要避免匹配22, 23, 32, 33,您将需要更复杂的东西,例如??s???'s answer。
您可以使用 shell glob:
rm *2* *3*
Run Code Online (Sandbox Code Playgroud)
这将删除当前工作目录中由*2*或*3*globs匹配的所有文件(不是目录)。
在这些 glob 中,“*始终表示“任何字符的任何数字(包括零)”。
但是请注意.,默认情况下IIRC Bash 的 glob 不匹配隐藏文件(文件名以 a 开头)。
对于当前目录或任何其他位置:
运行此命令以查看要删除的内容:
find . -type f -iname "*[32]*.wav"
Run Code Online (Sandbox Code Playgroud)然后删除:
find . -type f -iname "*[32]*.wav" -delete
Run Code Online (Sandbox Code Playgroud)更多信息:
. 表示当前目录,也可以是文件位置的路径,例如 /path/to/filesfind移动到预期目标中的任何目录,请使用 option -maxdepth 1,因此:
find . -maxdepth 1 -type f -iname "*[32]*.wav" -deletefind . -maxdepth 1 -type f -iname "*[32]*.wav" -delete警告
永远不要这样做,find . -delete -type f -iname "*[32]*.wav"否则所有(您的文件)都将被删除!