GNU/Linux >> Belajar Linux >  >> Ubuntu

Hapus Direktori Induk (tidak kosong) Jika Direktori Anak Tertentu Kosong?

Saya harus menyimpan semua direktori yang berisi file dalam subdirektori tertentu tetapi untuk menghapus semua direktori di mana subdirektori kosong.

Untuk lebih jelasnya berikut adalah strukturnya:

A||--------312311| || |----Rekaman| |----a.txt| |----b.txt|||--------453453| |----Rekaman| || |-------a.mp3| |----a.txt| |----b.txt|||--------566532| |----Rekaman| |----a.txt| |----b.txt 

Subdirektori mungkin atau mungkin tidak berisi file. Jadi saya perlu menghapus seluruh direktori seperti '312311' &'566532' dan hanya '453453' yang tersisa 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 harus melakukannya berkali-kali dalam seminggu.

Jawaban yang Diterima:

Script di bawah ini akan melakukan persis seperti yang Anda gambarkan, yaitu:

  1. mencantumkan folder di dalam direktori
  2. Melihat ke dalam setiap folder untuk folder bernama “Rekaman”

    • Jika ada dan kosong, itu menghapus folder superiornya
    • jika tidak tidak ada, itu juga menghapus folder superiornya
    • file di tingkat pertama di dalam A tidak akan dihapus.

Dalam sebuah gambar:

A||--------123456| || |----Rekaman| |----a.txt| |----b.txt|||--------635623| |----Rekaman| || |-------a.mp3| |----a.txt| |----b.txt|||--------123456| |----Rekaman| |----a.txt| |----b.txt||--------Monkey.txt 

akan mengakibatkan:

A||--------635623| |----Rekaman| || |-------a.mp3| |----a.txt| |----b.txt|||--------Monkey.txt 

Skrip

#!/usr/bin/env python3import osimport sysimport shutildr =sys.argv[1]def path(*args):return os.path.join(*args)for d in os.listdir(dr ):coba:jika bukan os.listdir(path(dr, d, "Recording")):shutil.rmtree(path(dr,d)) kecuali FileNotFoundError:shutil.rmtree(path(dr,d)) kecuali NotADirectoryError:lulus 

Untuk menggunakan

  1. Salin skrip ke file kosong, simpan sebagai delete_empty.py
  2. Jalankan dengan direktori (penuh!) (berisi subdir Anda, A dalam contoh Anda) sebagai argumen dengan perintah:

    python3 /path/to/delete_empty.py /path/to/directory 

Itu dia.

Penjelasan

Memberi makan konten folder Anda "A" ke skrip,

os.listdir(dr) 

akan mencantumkan subdirektori (dan file). Kemudian:

jika bukan os.listdir(path(dr, d, "Rekaman")) 

akan mencoba membuat daftar konten dari setiap (sub) folder, yang akan memunculkan kesalahan jika item tersebut adalah file:

kecuali kartu NotADirrectoryError 

atau jika folder “Rekaman” tidak ada sama sekali:

FileNotFoundError shutil.rmtree(path(dr,d)) 

Jika folder “Rekaman” ada dan kosong, folder superior dihapus:

jika bukan os.listdir(path(dr, d, "Recording")):shutil.rmtree(path(dr,d)) 

EDIT

Selain itu, seperti yang diminta dalam komentar, versi yang akan memeriksa beberapa subdir (nama).

Jika direktori berisi apa saja dari subdir yang terdaftar (tidak kosong), direktori disimpan. Jika tidak, akan dihapus.

Untuk menggunakan

  1. Salin skrip ke file kosong, simpan sebagai delete_empty.py
  2. Jalankan dengan direktori (penuh!) (berisi subdir Anda, A dalam contoh Anda) dan nama subdir sebagai argumen dengan perintah:

    python3 /path/to/delete_empty.py /path/to/directory    

Itu dia.

Terkait:Apa yang dilakukan "sudo echo nameserver 8.8.8.8> /etc/resolv.conf"?

Skrip

#!/usr/bin/env python3import shutilimport osimport sysdr =sys.argv[1]; cocok =sys.argv[2:]def path(*args):return os.path.join(*args)for d in os.listdir(dr):# hapus direktori *kecuali* salah satu dari subdir yang terdaftar memiliki file keep =False # periksa setiap subdir (nama) yang terdaftar untuk nama yang cocok:try:if os.listdir(path(dr, d, name)):keep =True break kecuali NotADirectoryError:# jika item bukan a dir, tidak menggunakan nama lain untuk memeriksa keep =True break kecuali FileNotFoundError:# jika nama (subdir) tidak ada, periksa pass berikutnya jika tidak keep:# jika tidak ada alasan untuk menyimpan --> delete shutil. rmtree(path(dr,d)) 

Catatan

Jalankan terlebih dahulu di direktori pengujian untuk memastikannya melakukan persis seperti yang Anda inginkan.


Ubuntu
  1. Pindahkan Hanya 8 File Terakhir Di Direktori Ke Direktori Lain?

  2. Default File Dan Folder Anak Baru Ke Kepemilikan Folder Induk?

  3. Apa cara teraman untuk mengosongkan direktori di * nix?

  1. Bagaimana saya bisa menghapus baris baru jika itu adalah karakter terakhir dalam file?

  2. Bagaimana cara membuat daftar ukuran direktori dari semua direktori anak?

  3. bagaimana saya bisa menghapus direktori kosong secara rekursif di direktori home saya?

  1. Hapus Direktori di Ubuntu 20.04 - Metode terbaik

  2. Apakah 'rm .*' Pernah Menghapus Direktori Induk?

  3. Mengapa Proses Pgid Anak Bukan Pid Orang Tua?