Saya ingin memasukkan folder berikut di terminal:
Milano, Torino (Jan)-Compressed
Bagaimana saya harus menulis perintah cd
untuk masuk ke direktori ini?
Spasi dan beberapa karakter khusus lainnya seperti \
, *
, )
, (
dan ?
menyebabkan masalah ketika saya mencoba untuk menggunakannya dalam baris perintah atau script, misalnya:
$ cd space dir
bash: cd: space: No such file or directory
$ cat space file
cat: space: No such file or directory
cat: file: No such file or directory
$ cat (
bash: syntax error near unexpected token `newline'
$ echo content >\
> ^C
$ ls ?
( ) * ? \
Bagaimana cara memasukkan nama file atau direktori yang berisi karakter khusus di terminal secara umum?
command-line
filename
cd-command
Pomario
sumber
sumber
Jawaban:
Perintah itu ambigu karena spasi biasanya digunakan untuk memisahkan argumen. cd tidak tahu apa yang ingin Anda lakukan tetapi Anda memiliki dua kemungkinan untuk menyelesaikannya:
Entah Anda " menutupi " spasi (dan semua karakter khusus lainnya) sehingga terminal tahu maksud Anda spasi sebagai karakter dan bukan sebagai pemisah:
Atau Anda memasukkan nama folder Anda ke dalam tanda kutip :
sumber
Sedikit tip: penyelesaian tab ;-)
cd Mi
(atau lebih banyak huruf jika diperlukan) dan tekan Tab. Terminal akan membantu Anda dengan menyelesaikan kata-kata lainnya.Cara lain: seret dan lepas
cd
pertama dan kemudian seret dan jatuhkan direktori pada terminal dan tekan enter.sumber
Tulis sebagai:
Kalau tidak, itu memperlakukan
Milano,
sebagai nama folder. Ini terjadi karena spasi pada nama folder. Atau luput beberapa karakter khusus:sumber
tl; dr : Mengutip karakter khusus baik menghindarinya dengan backslash
\
atau melampirkannya dalam" "
tanda kutip ganda atau tunggal' '
. Tab ↹Penyelesaian mengurus kutipan yang tepat.Apa yang Anda minta disebut Mengutip :
Mengutip dengan karakter pelarian
\
Jadi untuk memasukkan direktori atau file dengan karakter khusus, lepas dari yang terakhir dengan
\
, misalnya:bash
's Programmable Penyelesaian (alias Tab ↹Penyelesaian) secara otomatis lolos karakter khusus dengan karakter escape\
.Mengutip dengan tanda kutip ganda
" "
Jadi untuk memasukkan direktori atau file dengan karakter khusus, lepas setidaknya yang terakhir atau sebagian besar nama file atau jalur Anda dengan tanda kutip ganda, misalnya:
Sebagai
$
,`
dan!
menyimpan makna khusus mereka di dalam tanda kutip ganda, Ekspansi Parameter , Substitusi Perintah , Ekspansi Aritmatika , dan Ekspansi Sejarah dilakukan pada string yang dikutip ganda.Mengutip dengan tanda kutip tunggal
' '
Jadi untuk memasukkan direktori atau file dengan karakter khusus, lepas setidaknya yang terakhir atau sebagian besar nama file atau jalur Anda dengan tanda kutip ganda, misalnya:
Anda dapat menemukan lebih banyak tentang Mengutip di
man bash
/ QUOTING , di wiki.bash-hackers.org dan di tldp.org .sumber
String C-like dan $ 'string'
Antara lain, seseorang dapat menggunakan
$'...'
jenis kutipan untuk memanfaatkan karakter backslash ANSI-C seperti\n
dan\t
, termasuk yang telah Anda sebutkan. Dari manual bash 4.3:Ini sangat berguna dengan file yang berisi baris baru, tab, saat Anda menulis baris awk yang kompleks di mana Anda perlu memanfaatkan berbagai cara untuk membedakan antara tanda kutip tunggal dan ganda, ketika nama file itu sendiri mengandung tanda kutip tunggal / ganda, dll.
Misalnya, membuat dan mendaftar file seperti itu:
Anda dapat menggunakan nilai hex karakter, seperti:
printf
Ide yang sama seperti sebelumnya - manfaatkan karakter pelarian:
Gunakan inode:
Setiap file atau direktori memiliki struktur data khusus yang terkait dengannya disebut inode, yang dirujuk oleh angka desimal tertentu. Jadi Anda dapat menggunakannya untuk secara tidak langsung menemukan file dengan inode tertentu melalui
find
perintah, dan melakukan sesuatu dengannya:Hindari berurusan dengan file individual saat Anda dapat menggunakan glob
Ketika Anda tidak harus berurusan dengan file individual, manfaatkan
*
karakter glob di shell dan kutip variabel ketika meneruskannya ke perintah lain. Itu membuat berurusan dengan nama file yang sulit menjadi lebih mudah:Perhatikan penggunaan
./
- perlindungan terhadap nama file yang mungkin mengandung memimpin-
di dalamnya.sumber
Untuk membuka folder yang berisi spasi mengelilingi dalam tanda kutip seperti
cd "Some Directory"
atau melarikan diri ruang dengan garis miring terbalik, seperti:cd /home/kudic/Radna\ površina
.sumber
cd /home/kudic/Radna\ površina
'Radna površina'
), jika Anda tidak ingin variabel lingkungan ($VARNAME
) diperluas dan perintah terlampir dalam backticks atau$()
dijalankan (atau jika ada tanda kutip ganda dalam nama file).Jika direktori ini ada di folder rumah Anda, ketikkan:
jika tidak, berikan jalur absolut:
jika ada tanda kutip ganda dalam nama file maka lepaskan itu dengan
\"
sumber
Pilihan lain meskipun bukan yang terbaik dalam hal ini adalah menggunakan wildcard. Anda dapat mencoba:
cd *Torino*
Cara terbaik untuk menggunakan metode ini ketika ada kata atau frasa yang berbeda dalam nama direktori yang tidak dibagikan oleh orang lain. Misalnya saya punya mount point / media / DataSSD dan / media / DataHDD. Pelengkapan otomatis tidak berfungsi sampai saya mengetik hampir setengah dari nama sehingga untuk sampai ke partisi HDD saya, saya cukup mengetik
cd /media/*HD*
sumber