Coba ini:
for file in file{18..31}.txt
Ini dikenal sebagai "ekspresi urutan" dan merupakan bagian dari fitur ekspansi brace Bash . Ini bekerja di Bash 3 dan 4.
Fitur kenaikan baru untuk Bash 4. Anda mungkin memiliki Bash 3.x.
Di Bash 4, Anda dapat melakukan:
$ for i in {1..6..2}; do echo $i; done
1
3
5
Namun di Bash 3, Anda harus melakukan ini untuk mendapatkan hasil yang sama:
$ for ((i=1; i<=6; i+=2)); do echo $i; done
Bentuk yang sama bertambah satu:
$ for ((i=1; i<=6; i++)); do echo $i; done
Setiap angka dapat berupa variabel atau ekspresi. Namun, dalam ekspresi berurutan angka harus berupa konstanta
Berikut adalah contoh menggunakan formulir itu di file Anda:
for ((i=18; i<=31; i++))
do
echo "file${i}.txt"
done
Fitur baru lain dari ekspresi urutan dalam Bash 4 adalah kemampuan untuk memasukkan nol di depan. Ini berguna jika Anda ingin membuat (dan menggunakan) file bernomor yang dapat diurutkan dengan benar.
Dalam Bash 4:
touch file{001..010}.txt
akan membuat file bernama "file001.txt" melalui "file010.txt". Nama mereka akan disortir dalam urutan yang diharapkan. Tanpa nol di depan, "file10.txt" akan mengurutkan sebelum "file1.txt".
Untuk bekerja dengan file, Anda dapat menggunakan sintaks nol di depan yang sama:
for file in file{001..010}.txt; do echo "$file"; done
Di Bash 3, jika Anda membutuhkan nol di depan, Anda harus memberi nilai sendiri:
for i in {1..10}
do
printf -v i '%03d' $i
echo "file${i}.txt"
done
The printf
pernyataan akan tambahkan nilai i dengan nol terkemuka sehingga lebar adalah 3, misalnya ( "4" menjadi "004").
Edit:
Mengakomodasi ruang dalam nama file secara langsung:
$ 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
loop yang memungkinkan ruang dalam nama file menggunakan xargs. Tampaknya berfungsi jika Anda tidak memiliki bash 4. Jika Anda memiliki bash 4, maka pasti gunakan ekspansi brace! Lihat jawaban yang dipilih. Plug Shameless untuk memperbarui pesta Snow Leopard