Saya ingin membuat direktori sedemikian rupa sehingga saya perlu memberi label pada direktori dari a
ke z
. Di dalam masing-masing direktori ini, saya perlu membuat sub-direktori sehingga mereka diberi label aa
, ab
dll.
Jadi, misalnya, untuk direktori m
, sub-direktori saya akan diberi label sebagai ma
, mb
upto mz
.
shell-script
mkdir
Ramesh
sumber
sumber
/usr/share/terminfo
dengan [az] dan menggunakan output itu. Linux cukup jarang dalam hitungan itu, dulu merupakan entri untuk semua karakter huruf besar dan kecil ditambah digit.Jawaban:
Mencoba:
Bash akan memperluas
XXX{a..z}
untukXXXa
,XXXb
dan sebagainya. Tidak perlu untuk loop dalam yang Anda miliki.Setelah itu:
sumber
Jadi, dengan
bash
ekspansi alfabet, ini berfungsi:Dan jika Anda cukup mengetikkan alfabet satu kali di baris pertama, konsep yang sama harus portabel untuk semua shell. Ada cara lain untuk sampai pada garis yang ditetapkan jika Anda tidak ingin mengetiknya seperti:
... misalnya berfungsi di lokal ASCII. Jadi Anda bisa melakukan
set $(seq -sP32P 97 123|dc)
atau perintah lain yang akan membuat Anda$IFS
daftar terpisah dari argumen yang Anda butuhkan, tapi, maksud saya, mungkin lebih baik hanya menggunakanbash
hal itu atau mengetiknya.Bagaimanapun, saya pikir itulah cara saya akan melakukannya jika hanya karena itu hanya memanggil
mkdir
sesering yang diperlukan.Dan hanya untuk mendemonstrasikan cara kerjanya, berikut adalah sedikit hasil debug dari kumpulan yang lebih kecil:
Seperti yang Anda lihat,
for
satu - satunya loop sekali per indeks posisi parameter array, yang saya set di sini hanya dengan menyerahkansh
parameter saat doa, dan di atas denganset ${positionals}
. Tetapiprintf
menerima array yang sama dalam daftar argumennya untuk setiap iterasi dan menerapkan format string untuk setiap argumennya, sehingga Anda mendapatkan kemiripan rekursi tanpa rekursi yang tidak perlu.Dan menambahkan
done|command
akan mengalirkan semuafor
keluaran loop di atas pipa dengan cara yang samadone >file
akan mengalirkan semuanya ke dalam file - hanya membuka dan menutup file output sekali untuk seluruhfor...done
konstruksi.sumber
Dari sini , saya akhirnya membuat skrip seperti ini. Namun, jika saya mendapatkan solusi yang elegan, saya akan menerimanya sebagai jawaban.
sumber
/home/ramesh/"$x"/"$x$y"
,,/home/ramesh/"$x/$x$y"
atau"/home/ramesh/$x/$x$y"
- semuanya setara.Dalam
Perl
:File::Path
adalah modul inti sejak ituPerl 5.001
.sumber