Saat saya gunakan
find /home/user/parentdir -type d -empty -delete
itu terlihat secara rekursif untuk subfolder kosong di dalam /home/user/parentdir
dan menghapusnya. Tetapi jika /home/user/parentdir
juga kosong, itu menghapus parentdir
folder juga, yang tidak diinginkan untuk saya.
Saya ingin menyimpan ini parentdir
untuk rsync
beberapa file ke cadangan atau cloud. Setelah diproses, saya perlu menghapus folder kosong, tetapi tampaknya tidak produktif untuk membuat ulang parentdir
setiap waktu.
Ada saran untuk disimpan parentdir
? Saya berpikir tentang membuat .nocopy
file di dalamnya dan mengecualikannya rsync
, tetapi terlihat seperti berlebihan. Apakah ada cara yang lebih elegan?
command-line
bash
rsync
find
TNT
sumber
sumber
-mindepth 1
?Jawaban:
Lakukan saja
find /home/user/parentdir -mindepth 1 -type d -empty -delete
.Lihat:
Jawaban
find /home/user/parentdir/*
AmourK tidak diinginkan ketika ada banyak file dan terlalu rumit.sumber
Dengan menambahkan
/*
pada akhirparentdir
, Anda melakukan tindakan pada semua subdirektori parentdir daripada padaparentdir
dirinya sendiri. Dan dengan cara yang sama/home/user/
tidak dihapus dalam perintah lama,parentdir
tidak akan dihapus dalam perintah di bawah ini.*
disebut operator glob dan cocok dengan serangkaian karakter apa pun.find /home/user/parentdir/* -type d -empty -delete
sumber
/home/user/parentdir/
, glob yang diperluas dapat melebihiARG_MAX
, yang mengakibatkan daftar argumen kesalahan yang terlalu panjang . Anda dapat mengurangi kemungkinan itu terjadi dengan mengubah*/
bola sehingga hanya cocok dengan direktori./tmp
, membuat subdirektori, membongkar tarball gzip di sana, menjalankan installer, dan membersihkan. Pemikiran pemularm -rf /tmp/foo-install
adalah cara yang tepat untuk melakukan itu, dan ketika tangan yang berpengalaman mengatakan "Noooooo" dalam kesan terbaiknya Darth-Vader-pada-akhir-Episode-III, newb menemukan cara yang sulit seberapa dekat / dan Masukkan kunci satu sama lain. Kami harus mem-boot dari disk pemulihan perangkat lunak cadangan dan memuat ulang seluruh server dari tape.jika Anda menginstal php-cli,
sumber
foreach (RecursiveIteratorIterator(RecursiveDirectoryIterator($dir)) as $p) if (empty($skipped)) $skipped = TRUE; elseif ($p->isDir()) @rmdir($p->getPathname());
atau sesuatu yang dekat dengan itu.$skipped
mengurus melewatkan yang pertama,@rmdir
upaya untuk menghapus dir dan diam-diam (itulah @) gagal jika tidak kosong.Ketika Anda hanya membutuhkan satu level (meninggalkan folder induk, tetapi menghapus folder anak yang kosong), trik yang mudah adalah dengan menggunakannya
rmdir
.Menghapus semua subfolder kosong, tetapi hanya mencetak kesalahan untuk file dan folder tidak kosong.
Ini tidak bekerja secara rekursif, tetapi ketika mengetahui struktur folder Anda, ini mungkin cara tercepat untuk melakukan sesuatu
Keuntungan: Mudah diingat, cepat mengetik, sedikit potensi untuk memilih parameter yang salah.
Kerugian: Kurang fleksibel, mungkin banyak pesan kesalahan di terminal Anda.
sumber