Sebagai bagian dari skrip penerapan, saya ingin membuang beberapa barang yang di-cache dari direktori temp saya. Saya menggunakan perintah seperti:
rm /tmp/our_cache/*
Namun, jika /tmp/our_cache
kosong (cukup umum ketika mendorong banyak perubahan dalam suksesi cepat ke server pengujian kami), ini mencetak pesan kesalahan berikut:
rm: cannot remove `/tmp/our_cache/*': No such file or directory
Ini bukan masalah besar, tapi agak jelek dan saya ingin mengurangi rasio noise-to-signal pada output dari skrip ini.
Apa cara ringkas di unix untuk menghapus isi direktori tanpa mendapatkan pesan yang mengeluh bahwa direktori tersebut sudah kosong?
Edit 1
dihapus "-type f
Edit 2
Menambahkan opsi non-standar
-mindepth 1
untuk mencegah direktori root pencarian dihapus (setelah menghilangkan-type f
batasan).sumber
-type f
karena mungkin ada direktori sementara juga (meskipun contoh dalam pertanyaan tidak memperhitungkan mereka, jadi mereka mungkin tidak ada di sana ...)-type f
hanya akan menghapus file biasa, jadi tautan simbolik misalnya tidak akan dihapus./tmp/our_cache
sehingga Anda mungkin juga melakukannyarm -r /tmp/our_cache
. Saat Anda menggunakan opsi yang tidak standar, Anda bisa menggunakannya-mindepth 1
. Perhatikan bahwa bertentangan denganrm /tmp/our_cache/*
itu, ia juga menghapus subdirektori dan kontennya serta file tersembunyi.Anda dapat mengarahkan kesalahan standar
/dev/null
sehingga tidak akan mencetak inisumber
Cara lain (meskipun sedikit berlebihan ...):
ini menggunakan
test
atau[
untuk menguji apakah string kembali dari menjalankanls
di direktori Anda tidak kosong. Kemudian jika, dan hanya jika, string itu TIDAK kosong apakah itu menghapus semua yang ada di direktori Anda.CATATAN: membiarkan glob keluar dari
ls
akan menekan kesalahan tidak ada file.sumber
Jika skrip Anda menggunakan BASH, Anda dapat mencoba:
Melakukannya masih akan menghasilkan kesalahan jika ada masalah "nyata" atau jika suatu file diproteksi (Anda kemudian membutuhkan
-f
pengubahrm
untuk menghapus jenis file ini) tetapi akan menghindari kesalahan ketika tidak ada file di sana.Jika Anda menggunakan shell selain BASH untuk skrip Anda, seperti zsh, ksh, Anda dapat mencoba sintaks lain yang mungkin lebih portabel:
sumber