Tôi biết với mkdir tôi có thể làm mkdir A B C D E F
để tạo từng thư mục. Làm cách nào để tạo thư mục AZ hoặc 1-100 mà không cần gõ từng chữ cái hoặc số?
Tôi biết với mkdir tôi có thể làm mkdir A B C D E F
để tạo từng thư mục. Làm cách nào để tạo thư mục AZ hoặc 1-100 mà không cần gõ từng chữ cái hoặc số?
Câu trả lời:
Có lẽ dễ nhất là chỉ sử dụng một for
vòng lặp:
for char in {A..Z}; do
mkdir $char
done
for num in {1..100}; do
mkdir $num
done
Bạn cần ít nhất bash 3.0 mặc dù; nếu không, bạn phải sử dụng một cái gì đó nhưseq
Các {}
cú pháp là Bash cú pháp không gắn liền với for
xây dựng.
mkdir {A..Z}
là đủ tất cả của chính nó.
http://www.gnu.org/software/bash/manual/bashref.html#Brace-Expansion
mkdir -p ./logs-{1..5}
Bạn cũng có thể thực hiện các kết hợp phức tạp hơn (hãy thử các kết hợp này echo
thay vì mkdir
để không phải dọn dẹp sau đó):
Đối chiếu
$ echo pre-{{F..G},{3..4},{m..n}}-post
pre-F-post pre-G-post pre-3-post pre-4-post pre-m-post pre-n-post
đến
$ echo pre-{F..G}{3..4}{m..n}-post
pre-F3m-post pre-F3n-post pre-F4m-post pre-F4n-post pre-G3m-post pre-G3n-post
pre-G4m-post pre-G4n-post
Nếu bạn có Bash 4, hãy thử
$ echo file{0001..10}
file0001 file0002 file0003 file0004 file0005 file0006 file0007 file0008 file0009
file0010
và
$ echo file{0001..10..2}
file0001 file0003 file0005 file0007 file0009
Trên Linux, bạn có thể tạo các chuỗi chữ số bằng lệnh "seq", nhưng điều này không tồn tại trên tất cả các hệ thống Unix. Ví dụ: để tạo các thư mục từ 1 đến 100:
mkdir `seq 1 100`
Trong khi bạn chắc chắn có thể tạo các thư mục từ A đến Z với các tiện ích shell:
seq 65 90 \
| while read foo; do printf "%b\n" `printf '\\\\x%x\n' $foo`; done \
| xargs mkdir
Có lẽ nó ít xấu xí hơn khi chỉ sử dụng Perl:
perl -e 'foreach (ord "A"..ord "Z") { mkdir chr $_ }'
mkdir direct{1..3}
sẽ dẫn đến mkdir direct1 direct2 direct3
và như vậy. Giống với{a..z}