Dalam skrip bash berikut jika j = 0000 bagaimana saya harus mengubah skrip bash berikut untuk membuat dirs bernama 0001, 0002, ...? Sebenarnya itu membuat dir bernama 1, 2, 3
for i in *.jpg; do let j+=1 ; mkdir $j ; done
Terima kasih!
Script Anda saat ini hanya menggunakan nilai desimal - ini jelas diterjemahkan ke nilai tanpa memimpin nol.
Anda harus mengisi string dengan panjang 4 karakter, dengan angka nol di depannya. Anda melakukan ini dengan menggunakan backticks ``
untuk mendapatkan hasil panggilan printf printf %04d $j
.
Akibatnya, Anda harus memiliki perintah penuh:
for i in *.jpg; do let j+=1; mkdir `printf %04d $j`; done
Sumber: StackOverflow: bash - Padding nol dalam sebuah string
(Jelas juga lihat jawaban lebih lanjut untuk pertanyaan itu, jika Anda menginginkan solusi yang lebih mendalam, tetapi ini jelas bekerja dengan sempurna untuk use case ini.)
Menggunakan bash, opsi terbaik Anda adalah:
mkdir {0001..0666}
untuk membuat dir dengan nama 0001
ke 0666
(dengan bantalan nol).
Jika Anda ingin direktori bernama prefix0001suffix
, prefix0002suffix
, ... maka:
mkdir prefix{0001..0666}suffix
akan melakukan.
Jika Anda hanya ingin nama direktori nomor ganjil
mkdir {0001..0666..2}
dan seterusnya ... Lihat Brace Expansion dalam bash
manual referensi .
Seperti yang ditunjukkan oleh FEichinger, Anda harus mengetahui terlebih dahulu jumlah direktori. Jika Anda menginginkan solusi yang dekat dengan Anda, tetapi benar-benar aman dan menggunakan idiom bash yang lebih modern:
for i in *.jpg; do ((++j)); mkdir $(printf "%04d" $j) ; done