man
halaman rm
di GNU coreutils 8.12.197-032bb menjelaskan -f
atau --force
opsi sebagai "abaikan file yang tidak ada, jangan pernah meminta". Tanpa opsi ini, itu akan menghapus file yang ada, tidak pernah meminta, dan mengembalikan kode keluar bukan nol jika salah satu file yang ditentukan tidak ada. Saya ingin melestarikan file jika ada dari file yang ditentukan tidak ada . Apa cara termudah untuk melakukannya?
Kasus penggunaannya adalah keamanan :Jika saya mencoba menghapus file yang tidak ada, mungkin karena ada ekspektasi yang tidak valid (atau bug biasa) dalam perintah. Misalnya rm -rf /usr /lib/nvidia-current/xorg/xorg
yang terkenal dapat dihindari dengan banyak cara, salah satunya adalah opsi seperti itu (jelas kecuali jika pengguna secara kebetulan luar biasa memiliki /lib/nvidia-current/xorg/xorg
direktori), dan makhluk lain untuk Menggunakan Lebih Banyak Kutipan™. Namun, kutipan tidak selalu cukup. Misalnya, pertimbangkan ssh host '/bin/rm some paths; /bin/bash foo.sh'
– Jika saya lupa titik koma atau menyisipkan hampir semua simbol lain seperti titik dua atau koma, itu akan mencoba untuk menghapus /bin/bash
dan ~/foo.sh
.
Jawaban yang Diterima:
Saya menggunakan hal semacam ini:
mkdir DELETE && mv "some" "paths" DELETE && rm -rf DELETE
Untuk satu jalur:
mv /some/path DELETE && rm -rf DELETE
Lebih baik lagi, ketik rm command
pada baris perintah terpisah:mv /some/path DELETE
Masukkan rm -rf DELETE
Masukkan . Dengan begitu, satu-satunya rm
perintah yang membuatnya menjadi riwayat shell Anda ada di file bernama DELETE
, jadi jika Anda menghapus file versi lama, Anda tidak mengambil risiko menghapus versi baru dengan menekan Up secara tidak sengaja beberapa kali salah lalu Masukkan .
Jika Anda ingin sedikit mengotomatisasi:
mv_to_DELETE () {
mkdir DELETE &&
mv -- "[email protected]" DELETE/
}
mv_to_DELETE "some" "paths"
rm -rf DELETE