Cara memanipulasi nama fail yang mempunyai ruang dan watak khas di Linux

Cara memanipulasi nama fail yang mempunyai ruang dan watak khas di Linux

Kami menjumpai fail dan nama folder dengan kerap. Dalam kebanyakan kes fail/nama folder berkaitan dengan kandungan fail/folder dan bermula dengan nombor dan aksara. Nama fail alpha-ibunya cukup biasa dan sangat banyak digunakan, tetapi ini tidak berlaku apabila kita harus berurusan dengan nama fail/folder yang mempunyai watak khas di dalamnya.

Catatan: Kita boleh mempunyai fail apa -apa jenis tetapi untuk kesederhanaan dan pelaksanaan yang mudah kita akan berurusan dengan fail teks (.txt), sepanjang artikel.

Contoh nama fail yang paling biasa adalah:

ABC.txt avi.txt debian.TXT .. 

Contoh nama fail angka adalah:

121.TXT 3221.TXT 674659.TXT .. 

Contoh nama fail alfa-numerik adalah:

EG84235.TXT 3KF43NL2.TXT 2323DDW.TXT .. 

Contoh nama fail yang mempunyai watak khas dan tidak begitu biasa:

#232.TXT #BKF.TXT #BJSD3469.TXT #121NKFD.TXT -2232.txt -fbjdew.txt -gi32kj.TXT --321.TXT - -BK34.TXT .. 

Salah satu soalan yang paling jelas di sini ialah - yang di bumi mencipta/berurusan dengan fail/folder nama yang mempunyai hash (#), Separuh Kolon (;), A Dash (-) atau watak istimewa lain.

Saya bersetuju dengan anda, bahawa nama fail sedemikian tidak biasa masih shell anda tidak boleh pecah/menyerah apabila anda perlu berurusan dengan nama fail tersebut. Juga bercakap secara teknikal setiap perkara sama ada folder, pemandu atau apa sahaja yang dianggap sebagai fail di linux.

Berurusan dengan fail yang mempunyai dash (-) dalam namanya

Buat fail yang bermula dengan sengkang (-), katakan -abx.txt.

$ sentuh -abc.txt 
Output sampel
Sentuh: Pilihan Tidak Sah -'B' Cuba 'Sentuh -Help' untuk maklumat lanjut. 

Sebab untuk kesilapan di atas, shell itu menafsirkan apa -apa selepas sutera (-), sebagai pilihan, dan jelas tidak ada pilihan sedemikian, oleh itu adalah ralat.

Untuk menyelesaikan kesilapan sedemikian, kita harus memberitahu shell bash (yup ini dan kebanyakan contoh lain dalam artikel itu adalah untuk Bash) untuk tidak mentafsirkan apa -apa selepas watak khas (di sini dash), sebagai pilihan.

Terdapat dua cara untuk menyelesaikan kesilapan ini sebagai:

$ sentuhan --abc.TXT [OPTION #1] $ sentuh ./-abc.TXT [OPTION #2] 

Anda boleh mengesahkan fail yang dibuat dengan cara di atas dengan menjalankan arahan ls atau ls -l untuk penyenaraian panjang.

$ ls -l total 0 -rw-r-r-- 1 avi avi 0 Jun 8 11:05 -ABC.txt 

Untuk mengedit fail di atas yang boleh anda lakukan:

$ nano --abc.txt atau $ nano ./-abc.txt 

Catatan: Anda boleh menggantikan Nano dengan mana -mana editor pilihan anda vim sebagai:

$ vim --abc.txt atau $ vim ./-abc.txt 

Begitu juga untuk memindahkan fail sedemikian yang harus anda lakukan:

$ mv --abc.txt -a.txt atau $ mv --a.txt -abc.txt 

Dan untuk memadamkan fail ini, anda mesti lakukan:

$ rm --abc.txt atau $ rm ./-abc.txt 

Jika anda mempunyai banyak fail dalam folder nama yang mengandungi dash, dan anda ingin memadamkan semuanya sekaligus, lakukan sebagai:

$ rm ./-* 
Penting untuk diperhatikan:

1. Peraturan yang sama seperti yang dibincangkan di atas berikut untuk bilangan hypen atas nama fail dan kejadian mereka. Iaitu., -A-B-C.txt, AB-C.txt, ABC-.txt, dan lain-lain.

2. Peraturan yang sama seperti yang dibincangkan di atas berikut untuk nama folder yang mempunyai bilangan hypen dan kejadian mereka, kecuali hakikat bahawa untuk memadam folder yang anda harus gunakan 'rm -rf'Sebagai:

$ rm -rf --abc atau $ rm -rf ./-abc 

Berurusan dengan fail yang mempunyai hash (#) atas nama

Simbol # mempunyai makna yang sangat berbeza di bash. Apa -apa selepas a # ditafsirkan sebagai komen dan oleh itu diabaikan oleh Bash.

Faham menggunakan contoh:

Buat fail #ABC.txt.

$ sentuh #ABC.txt 
Output sampel
Sentuh: Operan fail yang hilang cuba 'sentuh -Help' untuk maklumat lanjut. 

Sebab untuk kesilapan di atas, bash itu menafsirkan #ABC.txt komen dan oleh itu mengabaikan. Oleh itu, sentuhan arahan telah diluluskan tanpa sebarang pengendalian fail, dan oleh itu adalah ralat.

Untuk menyelesaikan kesilapan tersebut, anda mungkin meminta Bash untuk tidak mentafsir # sebagai komen.

$ sentuh ./#ABC.txt atau $ sentuhan '#abc.txt ' 

dan sahkan fail yang baru dibuat sebagai:

$ ls -l total 0 -rw-r-r-- 1 avi avi 0 Jun 8 12:14 #ABC.txt 

Sekarang buat fail yang mengandungi nama yang # di mana sahaja kecuali di pengemis.

$ sentuh ./A#bc.TXT $ TOUCH ./ABC#.txt atau $ sentuh 'a#bc.TXT '$ sentuh' ABC#.txt ' 

Lari 'ls -l'Untuk mengesahkannya:

$ ls -l total 0 -rw-r-r-- 1 avi avi 0 Jun 8 12:16 A#bc.txt -rw-r-r-- 1 avi avi 0 Jun 8 12:16 ABC#.txt 

Apa yang berlaku apabila anda membuat dua fail (katakan a dan #BC) sekaligus:

$ sentuh a.TXT #BC.txt 

Sahkan fail yang baru dibuat:

$ ls -l total 0 -rw-r-r-- 1 avi avi 0 Jun 8 12:18 a.txt 

Jelas dari contoh di atas ia hanya membuat fail 'a'dan fail'#BC'telah diabaikan. Untuk melaksanakan situasi di atas yang dapat kita lakukan,

$ sentuh a.txt ./#bc.txt atau $ sentuh a.txt '#bc.txt ' 

dan mengesahkannya sebagai:

$ ls -l total 0 -rw-r-r-- 1 avi avi 0 Jun 8 12:20 a.txt -rw-r-r-- 1 avi avi 0 Jun 8 12:20 #BC.txt 

Anda boleh memindahkan fail sebagai:

$ mv ./#bc.txt ./#cd.txt atau $ mv '#bc.txt "#cd.txt ' 

Salin sebagai:

$ cp ./#cd.txt ./#de.TXT atau $ CP '#CD.txt "#de.txt ' 

Anda boleh mengeditnya sebagai menggunakan pilihan editor anda sebagai:

$ vi ./#cd.txt atau $ vi '#cd.txt ' 
$ nano ./#cd.txt atau $ nano '#cd.txt ' 

Dan padamkannya sebagai:

$ rm ./#bc.txt atau $ rm '#bc.txt ' 

Untuk memadam semua fail yang mempunyai hash (#) Dalam nama fail, anda boleh menggunakan:

 # rm ./#* 

Berurusan dengan fail yang mempunyai titik koma (;) atas namanya

Sekiranya anda tidak mengetahui, titik koma bertindak sebagai pemisah perintah di bash dan mungkin juga cangkang lain. Titik koma membolehkan anda melaksanakan beberapa arahan dalam satu perjalanan dan bertindak sebagai pemisah. Adakah anda pernah berurusan dengan nama fail yang mempunyai titik koma di dalamnya? Sekiranya tidak di sini anda akan.

Buat fail yang mempunyai separuh kolon di dalamnya.

$ sentuh; ABC.txt 
Output sampel
Sentuh: Operan fail yang hilang cuba 'sentuh -Help' untuk maklumat lanjut. Bash: ABC.TXT: Perintah tidak dijumpai 

Sebab untuk kesilapan di atas, apabila anda menjalankan perintah bash di atas menafsirkan sentuh sebagai arahan tetapi tidak dapat mencari sebarang fail operan sebelum titik koma dan oleh itu ia melaporkan ralat. Ia juga melaporkan kesalahan lain yang 'ABC.txt'Perintah tidak dijumpai, hanya kerana selepas titik koma Bash menjangkakan perintah lain dan'ABC.txt', bukan perintah.

Untuk menyelesaikan kesilapan sedemikian, beritahu Bash untuk tidak mentafsirkan titik koma sebagai pemisah perintah, sebagai:

$ sentuh ./'; ABC.txt 'atau $ sentuh'; ABC.txt ' 

Catatan: Kami telah memasukkan nama fail dengan petikan tunggal ". Ia memberitahu Bash bahawa ; adalah sebahagian daripada nama fail dan bukan pemisah perintah.

Selebihnya tindakan (iaitu., Salin, gerakkan, padam) pada fail dan folder yang mempunyai titik koma dalam namanya boleh dijalankan lurus ke hadapan dengan melampirkan nama dalam petikan tunggal.

Berurusan dengan watak khas lain dalam nama fail/folder

Ditambah tanda (+) dalam nama fail

Jangan memerlukan apa -apa tambahan, lakukanlah cara biasa, sebagai nama fail mudah seperti yang ditunjukkan di bawah.

$ sentuh +12.txt 

Tanda Dolar ($) dalam nama fail

Anda mesti memasukkan nama fail dalam petikan tunggal, seperti yang kita lakukan dalam hal titik koma. Selebihnya perkara lurus ke hadapan ..

$ sentuh '$ 12.txt ' 

Peratus (%) dalam nama fail

Anda tidak perlu berbuat apa -apa secara berbeza, memperlakukannya sebagai fail biasa.

$ sentuh %12.txt 

Asterisk (*) dalam nama fail

Mempunyai asterisk dalam nama fail jangan ubah apa -apa dan anda boleh terus menggunakannya sebagai fail biasa.

$ sentuh *12.txt 

Catatan: Apabila anda perlu memadam fail yang bermula dengan *, Jangan sekali -kali menggunakan arahan berikut untuk memadam fail tersebut.

$ rm * atau $ rm -rf * 

Sebaliknya gunakan,

$ rm ./*.txt 

Tanda seru (!) dalam nama fail

Lampirkan nama fail dalam petikan tunggal dan selebihnya perkara yang sama.

$ sentuh '!12.txt ' 

Pada tanda (@) dalam nama fail

Tidak ada tambahan, merawat nama fail yang mempunyai tanda sebagai fail nonrmal.

$ sentuh '@12.txt ' 

^ dalam nama fail

Tidak ada perhatian tambahan yang diperlukan. Gunakan fail yang mempunyai ^ dalam nama fail sebagai fail biasa.

$ sentuh ^12.txt 

Ampersand (&) dalam nama fail

Nama fail harus ditutup dalam petikan tunggal dan anda sudah bersedia untuk pergi.

$ sentuh '& 12.txt ' 

Kurungan () dalam nama fail

Sekiranya nama fail mempunyai kurungan, anda perlu melampirkan nama fail dengan petikan tunggal.

$ sentuh '(12.txt) ' 

Pendakap dalam nama fail

Tiada penjagaan tambahan diperlukan. Hanya memperlakukannya sebagai fail lain.

$ sentuh 12.txt 

Chevrons dalam nama fail

Nama fail yang mempunyai chevrons mesti dilampirkan dalam petikan tunggal.

$ sentuh '' 

Kurungan persegi [] dalam nama fail

Rawat nama fail yang mempunyai kurungan persegi sebagai fail biasa dan anda tidak perlu menjaga.

$ sentuh [12.txt] 

Di bawah skor (_) dalam nama fail

Mereka sangat biasa dan tidak memerlukan apa -apa tambahan. Lakukan apa yang akan anda lakukan dengan fail biasa.

$ sentuh _12.txt 

Sama-ke (=) dalam nama fail

Mempunyai tanda yang sama-untuk tidak mengubah apa-apa, anda boleh menggunakannya sebagai fail biasa.

$ sentuh = 12.txt 

Berurusan dengan slash belakang (\)

Backslash memberitahu Shell untuk mengabaikan watak seterusnya. Anda mesti memasukkan nama fail dalam petikan tunggal, seperti yang kita lakukan dalam hal titik koma. Selebihnya perkara lurus ke hadapan.

$ sentuh '.txt ' 

Kes khas slash ke hadapan

Anda tidak boleh membuat fail nama yang termasuk slash ke hadapan (/), Sehingga sistem fail anda mempunyai pepijat. Tidak ada cara untuk melarikan diri dari slash ke hadapan.

Jadi jika anda boleh membuat fail seperti '/12.txt ' atau 'b/c.txt ' Kemudian sama ada sistem fail anda mempunyai pepijat atau anda mempunyai sokongan unicode, yang membolehkan anda membuat fail dengan slash ke hadapan. Dalam kes ini, slash ke hadapan bukanlah slash ke hadapan yang nyata tetapi watak unicode yang kelihatan sama seperti slash ke hadapan.

Tanda soal (?) dalam nama fail

Sekali lagi, contoh di mana anda tidak perlu membuat percubaan khas. Nama fail yang mempunyai tanda tanya boleh dirawat dengan cara yang paling umum.

$ sentuh ?12.txt 

Dot Mark (.) dalam nama fail

Fail bermula dengan titik (.) sangat istimewa di linux dan dipanggil fail dot. Mereka adalah fail tersembunyi secara amnya fail konfigurasi atau sistem. Anda mesti menggunakan suis '-a'Atau'-A'Dengan Perintah ls Untuk melihat fail tersebut.

Membuat, mengedit, menamakan semula dan memadam fail tersebut terus maju.

$ sentuh .12.txt 

Catatan: Di linux anda mungkin mempunyai banyak titik (.) Seperti yang anda perlukan dalam nama fail. Tidak seperti titik sistem lain dalam nama fail tidak bermaksud untuk memisahkan nama dan lanjutan. Anda boleh membuat fail yang mempunyai banyak titik sebagai:

$ sentuh 1.2.3.4.5.6.7.8.9.10.txt 

dan periksa sebagai:

$ ls -l total 0 -rw-r-r-- 1 avi avi 0 Jun 8 14:32 1.2.3.4.5.6.7.8.9.10.txt 

Koma (,) dalam nama fail

Anda boleh mempunyai koma dalam nama fail, seberapa banyak yang anda mahukan dan anda tidak memerlukan apa -apa tambahan. Lakukan dengan cara yang normal, sebagai nama fail mudah.

$ sentuh, 12.TXT atau $ sentuhan, 12,.txt 

COLON (:) dalam nama fail

Anda boleh mempunyai kolon dalam nama fail, seberapa banyak yang anda mahukan dan anda tidak memerlukan apa -apa tambahan. Lakukan dengan cara yang normal, sebagai nama fail mudah.

$ sentuh: 12.TXT atau $ sentuhan: 12:.txt 

Mempunyai petikan (tunggal dan berganda) dalam nama fail

Untuk mempunyai petikan dalam nama fail, kita harus menggunakan peraturan pertukaran. I.e, jika anda perlu mempunyai petikan tunggal dalam nama fail, lampirkan nama fail dengan petikan berganda dan jika anda perlu mempunyai petikan berganda dalam nama fail, sertakannya dengan petikan tunggal.

$ sentuh "15 '.txt "dan $ sentuh '15".txt ' 

Tilde (~) dalam nama fail

Beberapa editor di Linux suka Emacs Buat fail sandaran fail yang diedit. Fail sandaran mempunyai nama fail asal ditambah tilde pada akhir nama fail. Anda boleh mempunyai fail yang nama yang termasuk Tilde, di mana -mana lokasi semata -mata sebagai:

$ sentuh ~ 1a.txt atau $ sentuh 2b ~.txt 

Ruang putih dalam nama fail

Buat fail Nama yang mempunyai ruang antara watak/perkataan, katakan "hai nama saya avishek.txt".

Bukan idea yang baik untuk mempunyai nama fail dengan ruang dan jika anda perlu nama yang boleh dibaca, anda harus menggunakan, menggariskan atau menyusu. Walau bagaimanapun, jika anda perlu membuat fail sedemikian, anda perlu menggunakan slash ke belakang yang mengabaikan watak seterusnya. Untuk membuat fail di atas, kita perlu melakukannya dengan cara ini ..

$ sentuh hi \ my \ name \ is \ avishek.txt hai nama saya avishek.txt 

Saya telah mencuba meliputi semua senario yang mungkin anda jumpai. Sebilangan besar pelaksanaan di atas secara eksplisit untuk shell bash dan mungkin tidak berfungsi di cangkang lain.

Sekiranya anda merasakan bahawa saya terlepas sesuatu (yang sangat biasa dan sifat manusia), anda mungkin memasukkan cadangan anda dalam komen di bawah. Terus bersambung, terus mengulas. Nantikan dan bersambung! Suka dan kongsi kami dan membantu kami tersebar!