Saya memiliki direktori di mesin Windows 7 saya yang memiliki ratusan atau ribuan direktori. Beberapa dari mereka memiliki file, beberapa tidak. Saya ingin menghapus semua direktori yang kosong.
Melihat perintah DOS del dan rmdir, sepertinya Anda tidak dapat melakukannya secara rekursif tanpa menghapus semua file. Apakah ada cara untuk melakukan ini dari baris perintah?
windows
command-line
Mohlsen
sumber
sumber
xcopy FROMDIR TODIR /s
. Lihat jawaban SO ini: stackoverflow.com/a/14742810Jawaban:
Anda dapat menggunakan utilitas Hapus Direktori Kosong .
Atau Anda dapat menggunakan file batch satu-liner ini (dari DownloadSquad ):
(jika digunakan di dalam file batch, ganti
%d
dengan%%d
)Ini berfungsi karena
rd
tidak akan menghapus direktori yang berisi file.sumber
Anda juga dapat menggunakan ROBOCOPY. Ini sangat sederhana dan juga dapat digunakan untuk menghapus folder kosong di dalam hierarki besar.
Di sini baik sumber dan tujuan
folder1
, karena Anda hanya perlu menghapus folder kosong, alih-alih memindahkan file lain ke folder lain./S
opsi adalah untuk melewatkan penyalinan (memindahkan, dalam kasus di atas) folder kosong. Ini juga lebih cepat karena file dipindahkan di dalam drive yang sama.sumber
folder1
? Menakutkan, kecuali diuji dengan baik./MOVE
menyalin file terlebih dahulu, dan kemudian menghapus file sumber setelah menyalin. Jadi, seperti/S
yang digunakan, ini menyalin folder yang tidak kosong ke tujuan (folder yang sama dalam kasus di atas). Kemudian, itu menghapus folder kosong (seperti, berpikir bahwa folder kosong telah disalin). Tidak, itu tidak memindahkan folder bersarang ke dalamfolder1
, karena ROBOCOPY memindahkan folder secara rekursif.Karena Cygwin dilengkapi dengan GNU find, Anda dapat melakukan ini:
Atau untuk menghindari kebisingan saat folder tidak ada lagi:
sumber
find . -type d -empty -delete
) ini gagal dari command prompt dengan kesalahan berikut:FIND: Parameter format not correct
Utilitas gratis EmptyFolderNuker melakukan ini dengan baik, dari folder dasar pilihan Anda. Itu juga menghapus direktori-direktori itu hanya berisi sub-direktori kosong.
sumber
"%~dp0\EmptyFolderNuker.exe" %cd%
.Jika Anda telah menginstal Cygwin , Anda dapat melakukan ini:
sumber
find
(starting-directory)
-depth
-type d ...
-depth
find
Jika Anda bekerja di emacs (membuat platform ini agnostik), berikut ini berfungsi:
sumber
D
jika saya mau, tetapi karena saya tidak memiliki kebutuhan bersama untuk ini, semua saya harus mengetik adalahM-x *ded RET
dan dilakukan. (Jika saya memang harus mengetik ini setiap waktu, Anda benar bahwa itu tidak masuk akal - untungnya bukan itu masalahnya.)M-x *ded RET
ada signifikansi atau acak? Jika yang terakhir, bagaimana Anda melacak semua pintasan yang telah Anda tetapkanemacs
? Apakah menghafal sudah mencukupi atau apakah Anda harus mencarinya?*ded
adalah singkatan untuk nama fungsi lengkap*-delete-empty-directories
. Banyak mesin penyelesaian (seperti ivy, yang saya gunakan) memahami pencocokan fuzzy semacam ini. Adapun menjaga mereka hafal ... Saya tidak perlu. Fungsi-fungsi yang telah saya definisikan semuanya dimulai dengan*
sehingga saya dapat dengan mudah menemukannya jika mereka tidak terikat pada kunci. Kalau tidak, emacs sendiri akan memberi tahu saya jika ada cara yang lebih cepat untuk memanggil fungsi. Jika semuanya gagal, selalu adaapropos
.Menggabungkan posting Gareth dan G-Man:
Sunting: Tapi itu memberikan kesalahan keamanan karena 'C' di PATH var saya ... jadi alih-alih:
Saya tidak menggunakan xargs karena tampaknya memiliki batas jalur input (sekitar 1024 baris, saya kira?), Sedangkan
terus berjalan selama ia memiliki input. Biarkan flag verbose '-v' jika Anda tidak ingin melihat hasilnya dan / atau ingin itu berjalan lebih cepat.
sumber
Hmmm ... solusi mungkin lebih sederhana:
for /d /r %d in (*.*) do rd "%d"
Mulai ini dari folder yang Anda ingin folder kosong dihapus.
/ d - akan bekerja pada folder, bukan file / r - akan mengembalikan subdir
sumber