Saya menggunakan rm
dalam skrip BASH untuk menghapus banyak file. Terkadang file tidak ada, sehingga melaporkan banyak kesalahan. Saya tidak butuh pesan ini. Saya telah mencari halaman manual untuk membuat perintah rm
, tetapi satu-satunya pilihan yang saya temukan adalah -f
, yang dari deskripsi, "abaikan file yang tidak ada, tidak pernah diminta", tampaknya menjadi pilihan yang tepat, tetapi nama itu sepertinya tidak cocok. , jadi saya khawatir ini mungkin memiliki konsekuensi yang tidak diinginkan.
- Apakah
-f
opsi itu cara yang benar untuk diamrm
? Kenapa tidak disebut-q
? - Apakah opsi ini melakukan hal lain?
Jawaban:
Penggunaan utama
-f
adalah untuk memaksa penghapusan file yang tidak akan dihapus menggunakanrm
dengan sendirinya (sebagai kasus khusus, itu "menghapus" file yang tidak ada, sehingga menekan pesan kesalahan).Anda juga dapat mengarahkan ulang pesan kesalahan menggunakan
(atau setara dengan sistem operasi Anda). Anda dapat memeriksa nilai
$?
segera setelah meneleponrm
untuk melihat apakah suatu file benar-benar dihapus atau tidak.sumber
--f
berlaku untuk GNU Coreutilsrm
, tetapi hanya karena kebetulan merupakan singkatan unik untuk--force
. Bentuk pendek-f
lebih jelas dan lebih portabel.--f
di sini hanya salah ketik untuk-f
.2>
lakukan?Ya,
-f
adalah pilihan yang paling cocok untuk ini.sumber
rm
kerm -i
.-f adalah flag yang benar, tetapi untuk operator uji, bukan rm
ini memastikan bahwa file itu ada dan merupakan file biasa (bukan direktori, simpul perangkat dll ...)
sumber
if [ -f "$THEFILE" ]; then rm "$THEFILE"; fi
:, yang membuat tes dan langkah-langkah penghapusan file secara berurutan.test
danrm
. Tidak ada cara yangrm
bisa dilakukan sebelum ditest
sini. Melihat sebelum Anda melompat adalah kesalahan umum dalam pemrograman bersamaan - Anda tidak dapat mempercayai hasil dari "tampilan" lebih lama ketika Anda benar-benar "melompat"; solusi untuk itu adalah dengan menggunakan penguncian atau operasi atom. Itulah tepatnya yang Anda inginkanrm -f
, yang merupakan contoh dari yang terakhir.\rm -f file
tidak akan pernah melaporkan tidak ditemukan.sumber
rm
(seperti yang populer di beberapa situs pada awal 1990-an untuk mencegah pemula menghapus barang-barang dan kemudian memanggil sysadmin untuk mendapatkan file mereka kembali).&&
sementara tanpa -f rusak setelah file tidak ditemukan.Sejauh
rm -f
melakukan "apa pun", itu memang memaksa (-f
adalah singkatan untuk--force
) penghapusan diam-diam dalam situasi di manarm
sebaliknya akan meminta Anda untuk konfirmasi. Misalnya, ketika mencoba untuk menghapus file yang tidak dapat Anda tulis dari direktori yang dapat Anda tulis.sumber
Saya memiliki masalah yang sama untuk cshell. Satu-satunya solusi yang saya miliki adalah membuat file dummy yang cocok dengan pola sebelum "rm" di skrip saya.
sumber
rm -f
atau tidakrm filename >&/dev/null
?