Saya memiliki banyak folder dan saya ingin mengulang semua folder itu dan di setiap folder membuat folder lain bernama "Foto"
F1
--F11
----F111
----F112
--F12
Saya ingin memiliki:
F1
--Photo
--F11
----Photo
----F111
------Photo
----F112
------Photo
--F12
----Photo
command-line
mkdir
OOzy Pal
sumber
sumber
ls
tidak diuraikan. Ini hanya umpan balik kepada pengguna ... yang menunjukkan apa yang terjadi. Sama seperti kata-kata "Ini adalah direktori foto". Ini memberi tahu pengguna mengapa tidak membuat direktori di sana.find -type d F1
, mungkin?$i/Photo
, tetapi OP belum menentukan apa yang harus dilakukan dalam kasus seperti itu. Ini juga akan gagal dalam, kasus tidak diakui, di mana salah satu dari$i
s berisi baris baru.Anda dapat mencapainya menggunakan satu
find
panggilan.Bagian
-name 'Photo' -prune -o
memberitahu untuk tidak berulang kePhoto
direktori yang ada (dan baru dibuat) : Jika file yang ditemukan (atau direktori) memiliki namaPhoto
, berhenti memprosesnya (-prune
). Dalam kasus lain (-o
), lanjutkan dengan direktori (-type d
) dan jalankan (-exec
) perintah.sumber
-prune
? :) Ya, ini cukup kontra-intuitif tetapi layak dipelajari.-type d
bersama-sama dengan-name 'Photo'
sebelum-prune
.find
akan melanjutkan dengan folder lain (termasuk subfolder dari folder itu, jika Anda memintanya).Anda dapat meneruskan
find
hasilwhile
alih-alihfor
karena cara ini tidak akan rusak jika nama file memiliki spasiPertama cd ke direktori
F1
, lalu lakukan:Jika direktori ada,
mkdir
hanya akan menolak untuk membuatnya, jadi tidak ada masalah di sana ...Jika nama direktori Anda bisa berisi baris baru, atau keanehan eksotis lainnya, gunakan ini yang bisa berurusan dengan nama arbitrer:
Terima kasih kepada @terdon untuk bantuannya :)
sumber
F1
direktori op adalah~user/Pictures
, pindah ke direktori induk dan menjalankan baris akan meletakkanPhoto
direktori di setiap direktori di ruangnya, yang bisa ribuan. Pertimbangkan untuk menambahkanF1
sebagai bagian dari commanline untuk menghindari kesalahan yang mudah dilakukan. Dengan begitu jika secara tidak sengaja dijalankan dari tempat yang salah, itu tidak akan membuat direktori.F1
diedit @LDJamesPython with
os.walk
dapat melakukannya dengan cukup mudah dan hanya dalam beberapa baris kodePenjelasan
Apa yang kita hadapi adalah perintah ini: python -c 'import os; [os.mkdir (r + "/ Pictures") untuk r, d, f di os.walk (".")]'
Di sini kita cukup memanggil penerjemah python dengan
-c
flag untuk menentukan perintah yang kita berikan dalam tanda kutip tunggal.os.walk()
fungsi memungkinkan kita untuk melangkah secara rekursif melalui semua subdirektori, dan untuk setiap subdirektori (diwakili olehr
), kita membuat folder Pictures melaluios.mkdir()
fungsi.r+"/Pictures"
hanyalah manipulasi string sederhana untuk bergabung dengan string subdirektori dan string "/ Gambar" bersama untuk membentuk satu jalurGanti "/ Gambar" dengan "/ Foto" agar sesuai dengan kebutuhan Anda
sumber
Jika Anda menggunakan bash, Anda cukup menjalankan:
The
globstar
merek pilihan**
cocok "semua file dan 0 atau lebih direktori dan subdirektori". Dengan kata lain, itu cocok dengan semuanya secara rekursif. Karena/
pada akhirnya,**/
akan cocok dengan semua direktori dan subdirektori (tidak ada file). Oleh karena itu,$d
akan mengulangi semua direktori di direktori saat ini dan subdirektori danPhotos
direktori akan dibuat di masing-masing direktori.The
-p
Benderamkdir
berarti:Di sini, saya hanya menggunakannya untuk menekan pesan kesalahan jika direktori target sudah ada. Hapus jika Anda ingin melihat kesalahan.
Perhatikan bahwa ini akan gagal membuat
Photo
subdirektori dalam direktori target yang berisi file bernama Foto. Anda belum menentukan apa yang harus dilakukan dalam kasus-kasus itu dan semua jawaban lain yang diposting sejauh ini juga memiliki batasan ini.sumber