尝试这个:
for file in file{18..31}.txt
它被称为“序列表达式”,是Bash 大括号扩展功能的一部分。它适用于Bash 3和4。
增量功能是Bash 4的新增功能。您可能拥有Bash3.x。
在Bash 4中,您可以执行以下操作:
$ for i in {1..6..2}; do echo $i; done
1
3
5
但是在Bash 3中,您必须执行以下操作才能获得相同的结果:
$ for ((i=1; i<=6; i+=2)); do echo $i; done
相同形式加一:
$ for ((i=1; i<=6; i++)); do echo $i; done
任何数字都可以是变量或表达式。但是,在序列表达式中,数字必须为常数
这是在文件上使用该表格的示例:
for ((i=18; i<=31; i++))
do
echo "file${i}.txt"
done
Bash 4中序列表达式的另一个新功能是能够包含前导零。如果您要创建(和使用)可以正确排序的编号文件,这将很有用。
在Bash 4中:
touch file{001..010}.txt
将创建名为“ file001.txt”至“ file010.txt”的文件。它们的名称将按预期顺序排序。没有前导零,“ file10.txt”将在“ file1.txt”之前排序。
要使用文件,可以使用相同的前导零语法:
for file in file{001..010}.txt; do echo "$file"; done
在Bash 3中,如果需要前导零,则需要自己填充该值:
for i in {1..10}
do
printf -v i '%03d' $i
echo "file${i}.txt"
done
该printf
语句将在i的值之前加上前导零,因此宽度为3,例如(“ 4”变为“ 004”)。
编辑:
在文件名中容纳空格很简单:
$ touch "space name "{008..018..3}" more spaces"
$ ls -l sp*
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000008 more spaces
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000011 more spaces
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000014 more spaces
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000017 more spaces
$ for f in "space name "{008..018..3}" more spaces"; do mv "$f" "${f}.txt"; done
$ ls -l sp*
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000008 more spaces.txt
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000011 more spaces.txt
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000014 more spaces.txt
-rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000017 more spaces.txt
for
循环的解决方案,该循环允许使用xargs在文件名中留空格。如果没有bash 4,这似乎可以工作。如果您具有bash 4,则一定要使用大括号扩展! 查看所选答案。 无耻的插件来升级雪豹猛击