Ich möchte folgenden Ordner im Terminal eintragen:
Milano, Torino (Jan)-Compressed
Wie soll ich den Befehl schreiben, cd
um in dieses Verzeichnis zu gelangen?
Spaces und einige andere Sonderzeichen wie \
, *
, )
, (
und ?
verursachen Probleme , wenn ich versuche , sie in der Befehlszeile oder Skripte zu verwenden, zB:
$ 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 ?
( ) * ? \
Wie gebe ich im Terminal generell Datei- oder Verzeichnisnamen ein, die Sonderzeichen enthalten?
command-line
filename
cd-command
Pomario
quelle
quelle
Antworten:
Dieser Befehl ist nicht eindeutig, da normalerweise Leerzeichen zum Trennen von Argumenten verwendet werden. CD weiß nicht, was Sie tun möchten, aber Sie haben zwei Möglichkeiten, um es zu lösen:
Entweder " maskieren " Sie die Leerzeichen (und alle anderen Sonderzeichen), damit das Terminal weiß, dass Sie das Leerzeichen als Zeichen und nicht als Trennzeichen verstehen:
Oder Sie setzen Ihren Ordnernamen oder Pfad in Anführungszeichen :
quelle
Ein kleiner Tipp: Tab Vervollständigung ;-)
cd Mi
(oder, falls erforderlich, mehrere Buchstaben) und drücken Sie Tab. Terminal hilft Ihnen, indem es die restlichen Wörter vervollständigt.Ein anderer Weg: Ziehen und Ablegen
cd
Ziehen Sie das Verzeichnis mit der Maus auf das Terminal und drücken Sie enter.quelle
Schreibe es als:
Andernfalls wird es
Milano,
als Ordnername behandelt . Dies geschieht aufgrund der Leerzeichen im Namen des Ordners. Alternativ können Sie einige der Sonderzeichen umgehen:quelle
tl; dr : Um ein Sonderzeichen
\
in" "
Anführungszeichen zu setzen, muss es entweder mit einem Backslash versehen oder in doppelte oder einfache Anführungszeichen eingeschlossen werden' '
. Tab ↹Die Vervollständigung sorgt für eine korrekte Preisangabe.Was Sie verlangen, heißt Zitieren :
Zitieren mit dem Escape-Charakter
\
Um also ein Verzeichnis oder eine Datei mit einem Sonderzeichen einzugeben, verlassen Sie letzteres mit
\
zB:bash
Durch die programmierbare Vervollständigung (auch als Tab ↹Vervollständigung bezeichnet) werden Sonderzeichen automatisch mit dem Escape-Zeichen ausgeblendet\
.Zitieren mit doppelten Anführungszeichen
" "
Wenn Sie also ein Verzeichnis oder eine Datei mit einem Sonderzeichen eingeben möchten, müssen Sie mindestens das letztere oder einen größeren Teil Ihres Dateinamens oder Pfads in doppelte Anführungszeichen setzen, z.
Wie
$
,`
und!
hält ihre besondere Bedeutung in doppelten Anführungszeichen, Parameter Expansion , Befehl Substitution , Arithmetic Erweiterung und Expansion Geschichte auf Strings in doppelten Anführungszeichen ausgeführt.Zitieren mit einfachen Anführungszeichen
' '
Wenn Sie also ein Verzeichnis oder eine Datei mit einem Sonderzeichen eingeben möchten, müssen Sie mindestens das letztere oder einen größeren Teil Ihres Dateinamens oder Pfads in doppelte Anführungszeichen setzen, z.
Weitere
man bash
Informationen zum Zitieren finden Sie in / QUOTING , auf wiki.bash-hackers.org und auf tldp.org .quelle
C-ähnliche Strings und $ 'string'
Unter anderem kann die
$'...'
Art der Anführungszeichen verwendet werden, um ANSI-C-Backslash-Zeichen wie\n
und zu verwenden\t
, einschließlich der von Ihnen erwähnten. Ab bash 4.3 Handbuch:Dies ist besonders nützlich bei Dateien, die Zeilenumbrüche und Tabulatoren enthalten, wenn Sie komplexe AWK - Zeilen schreiben, bei denen Sie zwischen einfachen und doppelten Anführungszeichen auf unterschiedliche Weise unterscheiden müssen, wenn Dateinamen selbst einfache / doppelte Anführungszeichen enthalten, usw.
So können Sie beispielsweise solche Dateien erstellen und auflisten:
Sie können hexadezimale Zeichenwerte verwenden, z.
printf
Gleiche Idee wie zuvor - nutzen Sie Fluchtzeichen:
Verwenden Sie Inodes:
Jeder Datei oder jedem Verzeichnis ist eine spezielle Datenstruktur zugeordnet, die als Inode bezeichnet wird und auf die durch eine bestimmte Dezimalzahl verwiesen wird. Sie können das also verwenden, um die Datei mit einem bestimmten Inode indirekt über einen
find
Befehl zu lokalisieren und etwas damit zu tun:Vermeiden Sie den Umgang mit einzelnen Dateien, wenn Sie glob verwenden können
Wenn Sie sich nicht mit einzelnen Dateien befassen müssen, nutzen Sie einfach das
*
Glob-Zeichen in der Shell und zitieren Sie Variablen, wenn Sie sie an andere Befehle übergeben. Dies erleichtert den Umgang mit schwierigen Dateinamen erheblich:Beachten Sie die Verwendung von
./
- als Schutz vor Dateinamen, die möglicherweise führende Zeichen enthalten-
.quelle
Um einen Ordner zu öffnen, der ein Leerzeichen enthält, setzen Sie diesen in Anführungszeichen
cd "Some Directory"
oder schließen Sie das Leerzeichen mit einem Backslash abcd /home/kudic/Radna\ površina
.quelle
cd /home/kudic/Radna\ površina
'Radna površina'
), wenn Umgebungsvariablen ($VARNAME
) nicht erweitert und Befehle nicht in Backticks eingeschlossen oder ausgeführt werden$()
sollen (oder wenn der Dateiname doppelte Anführungszeichen enthält).Befindet sich dieses Verzeichnis in Ihrem privaten Ordner, geben Sie Folgendes ein:
sonst absoluten Pfad angeben:
Wenn der Dateiname ein doppeltes Anführungszeichen enthält, schließen Sie das mit
\"
quelle
Eine andere Option, obwohl nicht die beste in diesem Fall, ist die Verwendung von Platzhaltern. Du kannst es versuchen:
cd *Torino*
Verwenden Sie diese Methode am besten, wenn der Name eines Verzeichnisses ein bestimmtes Wort oder einen bestimmten Ausdruck enthält, das bzw. der nicht von anderen geteilt wird. Zum Beispiel habe ich Mount-Punkte / media / DataSSD und / media / DataHDD. Die automatische Vervollständigung funktioniert erst, wenn ich fast die Hälfte des Namens eingebe. Um zu meiner Festplattenpartition zu gelangen, tippe ich einfach
cd /media/*HD*
quelle