Saya memiliki skrip bash yang ingin saya hapus file dari berbagai direktori. Seringkali, mereka tidak akan ada di sana karena mereka tidak dihasilkan dan itu baik-baik saja. Apakah ada cara untuk mendapatkan skrip untuk tidak melaporkan kesalahan itu, tetapi jika rm memiliki beberapa output lain untuk melaporkannya?
Atau, apakah ada perintah yang lebih baik untuk menghapus file yang tidak berisik?
Jika kebutuhan Anda adalah bahwa
rm
tidak mengeluh tentang file yang hilang, tetapi Anda juga ingin setiap lain keluaran darirm
, saran saya akan ujian pertama bagi keberadaan target file, dan hanya memanggilrm
( tanpa yang-f
flag) jika file benar-benar ada.Memanggil
rm -f
file yang, misalnya, tidak memiliki izin pengguna-tulis, akan menghapus file dan juga tidak memancarkan prompt normal untuk skenario itu.Jika Anda ingin menggunakan ide yang sama dengan banyak file, saya akan membuat definisi fungsi, seperti:
Gunakan seperti:
qrm file1 file2-does-not-exist *.txt etc here
sumber
Anda menyatakan bahwa Anda masih ingin melihat output lain dari
rm
perintah ketika Anda menjalankannya, tetapi menggunakan-f
opsi akan menekan itu. Anda perlu memfilter STDERR untuk apa yang Anda inginkan, yang sedikit rumit, mengingat Anda ingin semua yang lain ditampilkan.Anda akan ingin menggunakan perintah seperti ini:
Perintah menjelaskan:
-f
argumen adalah untuk memaksa dan tidak meminta konfirmasi atau kesalahan3>&1 1>&2 2>&3 3>&-
adalah untuk beralih STDOUT dan STDERR untuk pemfilteran (Anda dapat membaca lebih lanjut tentang ini di sini jika diinginkan| grep -v 'No such file or directory'
sedang memfilter pesan yang tidak ingin Anda lihatSekarang, jika Anda hanya ingin sepenuhnya menekan pesan kesalahan, Anda bisa menjalankan perintah berikut:
Perintah ini mengalihkan STDERR ke / dev / null sehingga Anda tidak akan melihatnya ketika Anda menjalankan perintah.
sumber
rm
tanpa-v
pernah keluaran ke stdout, hanya stderr, jadi dalam hal ini Anda bisa saja2>&1 | grep
tanpa tarian yang lebih bermanfaat secara umum,Sebagai alternatif, Anda dapat menggunakan
find
perintah dengan-delete
opsi. Ini (tentu saja) hanya akan menghapus file yang ditemukannya sehingga tidak pernah memperingatkan jika tidak ada. Contohnya mungkin:yang akan mencari
/var/log/triffids/
direktori dan menghapus semua file dengan.log
akhiran yang belum dimodifikasi selama lebih dari 30 hari.Itu selalu ide yang baik untuk menjalankan perintah ini tanpa satu
-delete
opsi pertama, untuk memastikan itu menemukan file yang Anda harapkan.sumber
Periksa opsi
--force
(-f
) darirm
:sumber
Ini adalah retasan, tetapi Anda selalu
touch
dapat menghapus file tersebut. Jika tidak ada, itu akan dibuat sehinggarm
dapat menghapusnya.sumber
Anda dapat menggunakannya
-f
sesuai keinginan, menurut halaman manual:tidak akan meminta Anda apa pun, dan akan melakukan apa yang Anda inginkan.
sumber
Ada dua cara utama: Jika Anda menambahkan opsi -f, itu tidak akan menunjukkan kesalahan "tidak ada" dan dua: (berfungsi untuk hampir semua perintah) alih-alih hanya melakukan "thecommand" do "thecommand 2> / dev / null "di mana" komunikasi "adalah perintah yang Anda lakukan.
sumber