Menggunakan pola globbing yang diperluas dalam bash:
rm ./!(*999*)
Ini perlu shopt -s extglobdiaktifkan (dan untuk keamanan juga shopt -s failglob, sehingga tidak ada file dengan nama yang tidak biasa !(*999*)dihapus secara tidak sengaja jika semua nama file berisi 999). Pola !(*999*)akan cocok dengan nama apa pun di direktori saat ini, kecuali nama-nama yang cocok *999*. Untuk juga menghapus file tersembunyi (file yang namanya dimulai dengan titik ), aktifkan juga dotglobopsi.
Untuk hanya peduli tentang file biasa atau tautan simbolis ke file biasa (bukan direktori, dll.):
for name in ./!(*999*); do [ -f "$name" ] && rm "$name"; done
The zshshell setara dengan lingkaran di atas akan
rm ./(^(*999*))(.)
Perintah pertama Anda tidak akan berfungsi karena grepakan melihat ke dalam file. Ini akan menghapus semua file yang memiliki baris tanpa 999di dalamnya (Anda telah menambahkan --nullopsi sehingga berfungsi dengan xargs -0).
Perintah kedua Anda tidak akan berfungsi karena greppada macOS tidak mendukung --null-data(namun ia memiliki --nullopsi, tetapi hanya untuk saat menghasilkan keluaran nama file). Juga mencatat bahwa hal itu akan mencari 999di mana saja di file path (termasuk komponen direktori), tidak hanya nama file.
grep -lmenyebabkannya untuk membuat daftar file di mana kecocokan ditemukan (atau tidak ditemukan dengan-v) dalam konten , bukan nama file.grepselalu cocok dengan konten file yang Anda tentukan, tidak pernah namanya.