如何 'rm' 或 'mv' 一系列文件,例如 file01.txt、file02.txt...file85.txt

25 command-line bash

假设我有一堆这样命名的文件:

file01.txt file02.txt file03.txt ... file20.txt
Run Code Online (Sandbox Code Playgroud)

我想对一系列这些文件执行命令。

我知道如果想从 'file05.txt' 'rm' 到 'file09.txt' 我可以这样做:

rm file0[5-9].txt
Run Code Online (Sandbox Code Playgroud)

但是我怎样才能'rm'从file08.txt到file13.txt的范围?我试过这个代码

rm file[08-13].txt
Run Code Online (Sandbox Code Playgroud)

它不起作用。我可以运行这个命令:

rm file0[89].txt file1[0-3].txt
Run Code Online (Sandbox Code Playgroud)

但我想知道如果可能的话,我是否可以只用一个更精细的参数来实现这个 'rm'。

hee*_*ayl 42

您需要使用大括号扩展bash

rm file{08..13}.txt
Run Code Online (Sandbox Code Playgroud)

这会将文件删除file08file13,如果缺少任何文件,将显示错误消息。

设置范围以满足您的需要。


globbing 运算符的问题[]在于它将其中的每个字符/数字视为单个标记,因此仅支持使用单个数字的范围声明。

如果你坚持使用[],你可以用这个比较难看模式匹配file08file13

rm file0[8-9].txt file1[0-3].txt
Run Code Online (Sandbox Code Playgroud)

  • 大括号扩展对逗号也很有用,比如 `mv foo.{txt,md}` 或 `cp foo.txt{,.bak}` (5认同)