Jika saya mengatur direktori saat ini / bekerja (menavigasi menggunakan itu cd
) ke beberapa direktori tertentu dan kemudian ketik:
rm *.xvg
Apa yang akan dilakukan perintah ini? Benarkah perintah di atas hanya akan menghapus file dengan ekstensi .xvg
hanya di direktori kerja?
Saya merasa gugup untuk mencoba ini sebelum bertanya, karena saya ingin benar-benar yakin bahwa perintah di atas hanya akan menghapus .xvg
file yang TERLETAK DI DIREKTORI KERJA .
rm -f {*.xvg,.*.xvg}
untuk menghapus juga file yang tersembunyi. Danrm -R -f {*.xvg,.*.xvg}
untuk menghapus juga direktori.Anda tidak perlu menavigasi ke dir, cukup gunakan
Jika Anda memiliki kesalahan ketik atau kesalahan serupa di path, di mana / som / dir tidak ada:
secara tidak sengaja akan menghapus semua file .xvg di direktori saat ini. Perintah pertama tidak akan, dan Anda tidak perlu melakukan cd kembali.
Cara alternatif adalah menggunakan find:
sumber
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 argumenprog arg1 arg2 arg3
saat dijalankan. Dalam kasusrm
, mereka ditafsirkan sebagai daftar nama file yang memenuhi syarat untuk dihapus. Jadi, jika Anda berada di direktori yang berisi filefoo.bar
, mengetikdelete 'foo.*'
akan menghasilkanrm: 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 mengetikecho *
di direktori yang sama akan ditampilkanfoo.bar
. Jadi ketika Anda mengetikrm *.bar
, apa yang sebenarnya terjadi adalah shell memperluas daftar argumenfoo.bar
, lalu meneruskannya kerm
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, mengetikkanrm **/*.bar
bash yang diaktifkan globstar memang akan menghapus semua file yang cocok secara rekursif dalam subfolder.sumber
Perintah:
bekerja untukku
Perintah:
memberikan perintah kesalahan (dalam bahasa Polandia, diterjemahkan):
di
sumber