Misalkan saya memiliki struktur direktori seperti ini:
$ [~ / latihan] ls a / b / c / d /
Sekarang saya ingin membuat direktori tmp1
di semua sub direktori practice
dan saya melakukan ini:
$ [~ / practice] mkdir * / tmp1 mkdir: tidak dapat membuat direktori `* / tmp1 ': Tidak ada file atau direktori tersebut
Lalu saya coba -p
sakelar dan saya akhiri dengan direktori yang dinamai *
dengan sub direktoritmp1
$ [~ / practice] mkdir -p * / tmp1 $ [~ / latihan] ls * / a / b / c / d /
Saya tahu penggunaan -p
switch adalah untuk membuat beberapa direktori yang tidak ada. Saya hanya berpikir itu mungkin membantu.
Bagaimana cara saya membuat tmp1
di semua subdirektori sekaligus?
Jika ini bisa dilakukan, bagaimana cara memperpanjang untuk membuat \tmp1
, \tmp2
, \tmp3
di \a
, \b
dan \c
sekaligus?
Edit: Aku rindu menyebutkan bahwa direktori tidak harus sederhana dan dalam rangka, seperti a
, b
, c
dll, dan direktori yang akan dibuat belum tentu seperti tmp1
, tmp2
.
$ [~ / latihan] ls anjing / kucing / tikus /
Di dalamnya, saya ingin memiliki sesuatu seperti
$ [~ / latihan] ls * anjing: merah biru/ kucing: merah biru/ tikus: merah biru/
Jawaban:
Dengan gumpalan :
CATATAN
*/
sebagai globJika Anda ingin membuat beberapa subdir sekaligus:
for dir in */; do mkdir -- "$dir"/{tmp1,foo,bar,qux}; done
sumber
for i in */; do mkdir "$i/itemone" "$i/itemtwo"; done
beberapa nama direktori yang tidak berurutan?sumber
Dengan GNU atau BSD * temukan:
atau menggunakan ekspansi parameter:
* Termasuk OS X
sumber
find . -name . -o -prune -type d -exec sh -c 'exec mkdir "$1/newdir"' sh {} \;
Di luar topik karena Anda sebutkan
bash
, tetapi sebagai catatan, dengan zsh, Anda akan melakukannya:$^var
mengaktifkan ekspansi brace-like untuk ekspansi array. Ini mengingatkanrc
's^
operator dan dalamrc
(atau turunannyaes
), Anda akan menulis itu:Namun perhatikan (dan hal yang sama berlaku untuk solusi bash yang diberikan di sini) bahwa dalam solusi rc
dirs
juga akan berisi tautan simbolis ke direktori. Dalam solusi zsh, ubah*(/)
ke*(-/)
jika Anda ingin menyertakan symlink ke direktori.sumber
-p
bendera.Mudah dibawa, putar di atas direktori induk:
Tambahkan
--
setelahmkdir
jika Anda memiliki direktori yang namanya dimulai-
.Di zsh, Anda dapat melakukannya dalam satu perintah dengan
e
kualifikasi glob :tetapi lebih cepat untuk mengetik ini sebagai dua perintah:
sumber
mkdir -- whatever
, dan mengabaikan--
jika Anda berniat untuk memperluas apa pun yang mungkin diambil sebagai opsi untukmkdir
perintah.". Tidak ada gunanya menghilangkan di--
sini. Ini mungkin bukan masalah dalam kasus OP, tapi itu adalah masalah umum. Saya pikir kita memiliki kewajiban untuk mengajarkan sintaks yang benar dan aman di sini.--
dan mengutip serta peringatan besar ketika baris baru tidak didukung. Dalam konteks baris perintah, saya lebih suka menampilkan versi cepat yang berfungsi pada praktiknya terlebih dahulu, dan versi antipeluru sebagai pelengkap.Anda dapat melakukannya seperti itu:
sumber
Variasi pada jawaban sputnick yang menghindari file non-direktori:
sumber
if [ -d "$x" ];…
?Ini adalah versi yang bagus dari Unix Masters lama (diuji pada FreeBSD 10.1) jika Anda ingin mengontrol versi (dengan RCS check in terkunci: ci-l dengan komentar singkat sebagai ir: untuk rilis awal) file konfigurasi / etc / * config Anda pada ~ / .ini / etc
sumber
Seharusnya \! beri nama "RCS" dan berfungsi paling baik pada saat check-in pertama.
sudo find ~ / .his / etc \! -nama "RCS" -l
sudo find -d ~ / .his / etc \! -nama "RCS" | xargs sudo ci -l -mir -t-ir
Yang terakhir ini juga berfungsi dengan baik untuk cjeck di bagian memfilter semua konten RCS pada nama file:
sudo find -d ~ / .his / etc -type f | grep -v RCS | xargs sudo ci -l -mir -t-ir
sumber
ini sangat membantu saya. saya harus membuat satu set subdirektori dalam beberapa folder dan sesuatu seperti:
bekerja sangat baik kecuali ketika ruang putih ditemukan. adakah cara untuk mengabaikan ruang di
*/*/
bagian argumen?sumber