Ya, rm *.xvg
hanya akan menghapus file yang diakhiri dengan .xvg
direktori Anda saat ini. Inilah sebabnya.
Saat Anda mengetik perintah seperti ini, pekerjaan dibagi antara shell yang Anda gunakan (mari kita asumsikan bash) dan biner perintah.
Anda dapat menemukan biner dengan mengetik which rm
. Program kecil ini menangani penghapusan tautan file. Program seperti ini dapat dimulai dari baris perintah dan dapat membaca daftar argumen prog arg1 arg2 arg3
saat dijalankan. Dalam kasus rm
, mereka ditafsirkan sebagai daftar nama file yang memenuhi syarat untuk dihapus. Jadi, jika Anda berada di direktori yang berisi file foo.bar
, mengetik delete 'foo.*'
akan menghasilkan rm: foo.*: No such file or directory
. Perhatikan tanda kutip tunggal di sekitar pola file, mereka memberi tahu shell untuk meneruskan argumen ke shell sebagaimana adanya.
Namun jika Anda mengetik rm *.bar
di direktori yang sama, itu akan menghapus file. Apa yang terjadi di sini adalah shell Anda, yang merupakan program yang Anda gunakan untuk mengetikkan perintah, melakukan beberapa transformasi sebelum meneruskan argumen ke perintah. Salah satunya disebut 'ekspansi nama file', atau dikenal sebagai 'globbing'. Anda dapat melihat daftar perluasan nama file bash di sini . Salah satu ekspansi yang paling umum adalah *
, yang diperluas ke nama file di direktori saat ini.
Cara sederhana untuk melihat gumpalan di tempat kerja adalah menggunakan echo
, yang mencetak kembali semua argumen yang diteruskan melalui cangkang. Jadi mengetik echo *
di direktori yang sama akan ditampilkan foo.bar
. Jadi ketika Anda mengetik rm *.bar
, apa yang sebenarnya terjadi adalah shell memperluas daftar argumen foo.bar
, lalu meneruskannya ke rm
perintah.
Ada beberapa cara mengendalikan globbing. Dalam versi bash terbaru, misalnya, Anda dapat mengaktifkan opsi yang disebut globstar yang akan melakukan ekspansi rekursif. Mengetik echo **/*.bar
akan menampilkan daftar semua file yang diakhiri .bar
dengan semua subfolder. Jadi, mengetikkan rm **/*.bar
bash yang diaktifkan globstar memang akan menghapus semua file yang cocok secara rekursif dalam subfolder.
rm -f {*.xvg,.*.xvg}
untuk menghapus juga file yang tersembunyi. Danrm -R -f {*.xvg,.*.xvg}
untuk menghapus juga direktori.