Saya ingin menjalankan baris perintah:
cd ~/www/tmp/; rm -P 2*
Tapi saya mendapatkan kesalahan jika tidak ada file yang dimulai dengan 2.
Anda akan berpikir saya ingin menggunakan -f
, namun:
-f Attempt to remove the files without prompting for confirmation, regardless of the file's permissions. If the file does not exist, do not display a diagnostic message or modify the exit status to reflect an error.
Dan saya melakukan perawatan tentang file permissions- jika ada sesuatu yang aneh terjadi, saya lebih memilih perintah batalkan. Saya hanya ingin menekan kesalahan 'tidak ada'.
Saya telah melihat beberapa pertanyaan lain dengan 'rm error', dan menemukan dua pertanyaan yang tampaknya (agak) relevan:
Hapus file dan direktori dengan namanya. tidak ada berkas atau direktori seperti itu
Tapi, saya tidak mengerti semua yang terjadi dalam jawaban untuk pertanyaan ini, dan tidak tahu bahwa saya membutuhkannya?
The touch
hack disarankan dalam pertanyaan ini:
Sudahkah saya tidak melaporkan ketika file hilang?
Tampaknya bisa diterapkan, karena saya rasa saya tidak keberatan dengan kinerja yang memukul (tetapi jenis kinerja apa yang akan Anda ambil? - yaitu: apakah ini teknik yang cukup scalable, atau apakah saya hanya mempelajari kebiasaan yang sangat buruk?)
Saya tidak yakin bagaimana saya akan melakukan if-then
dalam baris perintah.
Apakah ada opsi lain untuk pembersihan command-line sederhana cut-n-paste?
Akan find -delete
bekerja lebih baik untuk kasus saya? Jika demikian, mengapa?
kesalahan dalam pertanyaan:
rm: 2*: No such file or directory
sumber
rm
, jadi Anda harus mengatakan apa itu.zsh
sebagai shell interaktif Anda? Apakah Anda mendapatkanNo matches found
kesalahan?2*
ke rm alih-alih memperluasnya ke daftar file. Lihatlah kesalahan yang dimaksud: dikatakan bahwa rm mengeluh, bukan sh / bas / zsh / ...Jawaban:
Untuk hanya memanggil
rm -P
untuk yang ada file biasa yang namanya cocok dengan pola dalam sebuah direktori (tapi tidak di bawah):Misalnya,
Untuk mencocokkan hanya non-direktori, gunakan
! -type d
di tempat-type f
. Perbedaannya adalah itu! -type d
akan berlaku untuk berbagai jenis file (tautan simbolik, pipa bernama, soket, dll.)Karena Anda ingin diminta untuk beberapa kondisi di file yang ditemukan, Anda harus tidak menggunakan
-delete
bukan-exec rm
karena yang bekerja sebagairm -f
.Hapus
-maxdepth 1
untuk membiarkanfind
melihat dalam subdirektori secara rekursif.sumber
! -type d
mungkin lebih dekatrm 2*
, kurasa?find ~/www/tmp/ -maxdepth 1 -type f -name '2*' -exec rm -P {} +
-P
.-type f
, tetapi tidak tahu bagaimanarm
bertindak seperti itu - jadi saran @ Kusalanada sangat tepat, dan diferensiasi / penjelasannya bagus untuk belajar.rm 2*(.)
dalam zsh).