Thử đi:
for file in file{18..31}.txt
Nó được gọi là "biểu thức trình tự" và nó là một phần của tính năng mở rộng cú đúp của Bash . Nó hoạt động trong Bash 3 và 4.
Tính năng tăng dần là mới đối với Bash 4. Bạn có thể có Bash 3.x.
Trong Bash 4, bạn có thể làm:
$ for i in {1..6..2}; do echo $i; done
1
3
5
Nhưng trong Bash 3, bạn phải làm điều này để có kết quả tương tự:
$ for ((i=1; i<=6; i+=2)); do echo $i; done
Hình thức tương tự tăng thêm một:
$ for ((i=1; i<=6; i++)); do echo $i; done
Bất kỳ số nào cũng có thể là biến hoặc biểu thức. Tuy nhiên, trong một biểu thức tuần tự, các số phải là hằng số
Dưới đây là một ví dụ sử dụng biểu mẫu đó trên các tệp của bạn:
for ((i=18; i<=31; i++))
do
echo "file${i}.txt"
done
Một tính năng mới khác của biểu thức chuỗi trong Bash 4 là khả năng bao gồm các số 0 đứng đầu. Điều này hữu ích nếu bạn muốn tạo (và sử dụng) các tệp được đánh số có thể được sắp xếp đúng.
Trong Bash 4:
touch file{001..010}.txt
sẽ tạo các tệp có tên "file001.txt" thông qua "file010.txt". Tên của họ sẽ sắp xếp theo thứ tự dự kiến. Nếu không có các số 0 đứng đầu, "file10.txt" sẽ sắp xếp trước "file1.txt".
Để làm việc với các tệp, bạn có thể sử dụng cú pháp zero hàng đầu tương tự:
for file in file{001..010}.txt; do echo "$file"; done
Trong Bash 3, nếu bạn cần các số 0 đứng đầu, bạn cần tự đệm giá trị:
for i in {1..10}
do
printf -v i '%03d' $i
echo "file${i}.txt"
done
Câu printf
lệnh sẽ trả trước giá trị của i với các số 0 đứng đầu, vì vậy chiều rộng là 3, ví dụ ("4" trở thành "004").
Biên tập:
Việc chứa các không gian trong tên tệp rất đơn giản:
$ 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
vòng lặp cho phép khoảng trắng trong tên tệp bằng xargs. Nó dường như hoạt động nếu bạn không có bash 4. Nếu bạn có bash 4, thì chắc chắn sử dụng mở rộng cú đúp! Xem câu trả lời được chọn. Ổ cắm không biết xấu hổ để nâng cấp bash Snow Leopard