これを試して:
for file in file{18..31}.txt
これは「シーケンス式」として知られており、Bashのブレース拡張機能の一部です。Bash 3および4で動作します。
増分機能はBash 4の新機能です。おそらくBash 3.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
1ずつ増加する同じフォーム:
$ for ((i=1; i<=6; i++)); do echo $i; done
任意の数値を変数または式にすることができます。ただし、シーケンス式では、数値は定数でなければなりません
ファイルでそのフォームを使用する例を次に示します。
for ((i=18; i<=31; i++))
do
echo "file${i}.txt"
done
Bash 4のシーケンス式のもう1つの新機能は、先行ゼロを含める機能です。これは、適切にソートできる番号付きファイルを作成(および使用)する場合に便利です。
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
ステートメントは、幅が3になるように、iの値の先頭にゼロを追加します(「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がなくても機能するようです。bash4があれば、間違いなくブレース拡張を使用してください! 選択した回答をご覧ください。 Snow Leopard bashをアップグレードするための恥知らずなプラグ