Baru-baru ini saya dihadapkan pada tugas untuk menghapus semua file / folder dalam direktori tidak termasuk yang cocok dengan pola tertentu. Jadi saya membuat perintah unix baris tunggal untuk melakukan pekerjaan. Haruskah hanya satu baris? Saya kira tidak, tapi pasti lebih dingin seperti itu!
Walaupun masalahnya cukup sederhana, saya sedikit terkejut melihat betapa rumitnya solusi saya. Inilah perintah yang saya gunakan; CATATAN: ini adalah solusi yang buruk karena tidak menangani nama file yang mengandung karakter umpan baris (yang tidak masalah dalam situasi saya).
ls | grep -v PATTERN | xargs -n1 -IREPLACE rm -rf REPLACE
Saya tidak menggunakan perintah "find" karena saya tidak ingin recurse ke folder yang cocok dengan POLA. Misalnya, pertimbangkan struktur file berikut:
file_foo.txt
first_dir
|
+--> contents
+--> ...
foo_dir
|
+--> anotherfile.txt
+--> morefiles.log
foo_file.txt
somefile.txt
Menggunakan pola "foo" hanya harus menghapus "first_dir" (dan isinya tentu saja) dan "somefile.txt" ( tidak "anotherfile.txt" atau "morefiles.log").
Pertanyaan, adakah cara yang lebih baik (lebih elegan dan benar) untuk mencapai ini?
EDIT:
Baru-baru ini menarik perhatian saya bahwa "menemukan" mungkin a lebih baik pilihan:
find * -maxdepth 0 ! -name PATTERN -print0 | xargs -0n1 rm -rf
Solusi ini tidak menangani jalur yang berisi karakter umpan baris dengan benar.