Saya harus menyimpan semua direktori yang berisi file dalam subdirektori tertentu tetapi untuk menghapus semua direktori di mana subdirektori kosong.
Untuk lebih spesifik di sini adalah struktur:
A
|
|--------312311
| |
| |----Recording
| |----a.txt
| |----b.txt
|
|
|--------453453
| |----Recording
| |
| |-------a.mp3
| |----a.txt
| |----b.txt
|
|
|--------566532
| |----Recording
| |----a.txt
| |----b.txt
Sub direktori mungkin atau mungkin tidak mengandung file. Jadi saya perlu menghapus seluruh direktori seperti '312311' & '566532' dan hanya '453453' harus dibiarkan dengan semua data di dalamnya karena memiliki file di folder 'Rekaman' yang merupakan direktori khusus untuk saya.
Saya melihat banyak posting tetapi tautan ke banyak nama file tertentu. Bantuan apa pun akan sangat dihargai karena saya perlu melakukannya berkali-kali dalam seminggu.
command-line
directory
find
Derek James
sumber
sumber
Jawaban:
Script di bawah ini akan melakukan persis seperti yang Anda gambarkan, yaitu:
Lihat di dalam setiap folder untuk folder bernama "Perekaman"
Dalam sebuah gambar:
akan menghasilkan:
Naskah
Menggunakan
delete_empty.py
Jalankan dengan direktori (penuh!) (Berisi dalam subdir Anda, A dalam contoh Anda) sebagai argumen dengan perintah:
Itu dia.
Penjelasan
Mengumpankan konten folder Anda "A" ke skrip,
akan mendaftar subdirektori (dan file). Kemudian:
akan mencoba membuat daftar konten dari masing-masing folder (sub), yang akan menimbulkan kesalahan jika item tersebut adalah file:
atau jika folder "Rekaman" tidak ada sama sekali:
Jika folder "Rekaman" ada dan kosong, folder superior dihapus:
EDIT
Selain itu, seperti yang diminta dalam komentar, versi yang akan memeriksa beberapa subdir (nama).
Jika direktori berisi salah satu dari subdir yang terdaftar (kosong), direktori tersebut disimpan. Jika tidak maka akan dihapus.
Menggunakan
delete_empty.py
Jalankan dengan direktori (penuh!) (Berisi subdir Anda, A dalam contoh Anda) dan nama-nama subdirs sebagai argumen dengan perintah:
Itu dia.
Naskah
Catatan
Pertama jalankan di direktori tes untuk memastikan itu melakukan apa yang Anda inginkan.
sumber
Menggunakan
find
danxargs
:(hapus
echo
begitu Anda merasa nyaman bahwa itu mengidentifikasi direktori yang benar). Bagianprintf '%h\0
mencetak direktori induk (null dihentikan) - dariman find
:Mis .: diberikan
kemudian
sumber
[\d]*
?Berikut ini adalah solusi bash yang lebih sederhana:
Ini berfungsi karena
rmdir
akan gagal jika direktori tidak kosong, dan&&
akan mencegahrm -r
dari dieksekusi kecualirmdir
berhasil. Glob*/
memastikan Anda hanya bekerja pada direktori, jadi file lain tidak akan terpengaruh.sumber