Je veux entrer le dossier suivant dans le terminal:
Milano, Torino (Jan)-Compressed
Comment dois-je écrire la commande cd
pour entrer dans ce répertoire?
Les espaces et plusieurs autres caractères spéciaux comme \
, *
, )
, (
et ?
causer des problèmes lorsque je tente de les utiliser dans la ligne de commande ou des scripts, par exemple:
$ 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 ?
( ) * ? \
Comment entrer des noms de fichiers ou de répertoires contenant des caractères spéciaux dans le terminal en général?
command-line
filename
cd-command
Pomario
la source
la source
Réponses:
Cette commande est ambiguë car les espaces sont normalement utilisés pour séparer les arguments. cd ne sait pas ce que vous voulez faire mais vous avez deux possibilités pour le résoudre:
Soit vous " masquez " les espaces (et tous les autres caractères spéciaux) afin que le terminal sache que vous entendez l'espace en tant que caractère et non en tant que séparateur:
Ou vous mettez votre nom de dossier ou votre chemin entre guillemets :
la source
Un petit conseil: la fin de l'onglet ;-)
cd Mi
(ou plusieurs lettres si nécessaire) et appuyez sur Tab. Terminal vous aidera en complétant les mots restants.Une autre façon: glisser et déposer
cd
abord, puis faites glisser le répertoire sur le terminal et appuyez sur enter.la source
Écrivez-le comme:
Sinon, il s'agit du
Milano,
nom du dossier. Cela se produit à cause des espaces dans le nom du dossier. Vous pouvez également échapper quelques caractères spéciaux:la source
tl; dr : pour citer un caractère spécial, écrivez-le avec une barre oblique inverse
\
ou mettez-le entre" "
guillemets simples ou doubles' '
. Tab ↹L'achèvement prend soin de la citation correcte.Ce que vous demandez s'appelle citer :
Citer avec le personnage d'échappement
\
Donc, pour entrer dans un répertoire ou un fichier avec un caractère spécial, échappez ce dernier avec
\
, par exemple:bash
de » achèvement programmable (aka Tab ↹achèvement) échappe automatiquement des caractères spéciaux avec le caractère d'échappement\
.Citations avec guillemets
" "
Donc, pour entrer dans un répertoire ou un fichier avec un caractère spécial, échappez au moins ce dernier ou une partie plus importante de votre nom de fichier ou de votre chemin avec des guillemets, par exemple:
Comme
$
,`
et!
gardent leur signification spéciale à l' intérieur des guillemets doubles, extension des paramètres , commande Remplacement , Arithmétique et extension Histoire sont effectuées sur les chaînes entre guillemets doubles.Citer avec des guillemets simples
' '
Donc, pour entrer dans un répertoire ou un fichier avec un caractère spécial, échappez au moins ce dernier ou une partie plus importante de votre nom de fichier ou de votre chemin avec des guillemets, par exemple:
Vous pouvez en savoir plus sur
man bash
Quotation dans / QUOTING , sur wiki.bash-hackers.org et sur tldp.org .la source
Chaînes de type C et $ 'chaîne'
Entre autres choses, on peut utiliser le
$'...'
type de citation pour utiliser les barres obliques inverses ANSI-C telles que\n
et\t
, y compris celles que vous avez mentionnées. De bash 4.3 manuel:Ceci est particulièrement utile pour les fichiers contenant des sauts de ligne, des tabulations, lorsque vous écrivez des lignes complexes awk dans lesquelles vous devez utiliser différentes méthodes pour distinguer les guillemets simples et doubles, lorsque les noms de fichiers contiennent eux-mêmes un méli-mélo de guillemets simple / double, etc.
Par exemple, créer et lister de tels fichiers:
Vous pouvez utiliser des valeurs hexadécimales de caractères, telles que:
printf
Même idée qu'auparavant - profitez des caractères d'échappement:
Utilisez des inodes:
Chaque fichier ou répertoire est associé à une structure de données spéciale appelée inode, référencée par un nombre décimal particulier. Vous pouvez donc l'utiliser pour localiser indirectement le fichier avec un inode particulier via une
find
commande, et en faire quelque chose:Évitez de traiter des fichiers individuels lorsque vous pouvez utiliser glob
Lorsque vous n'avez pas à traiter des fichiers individuels, tirez simplement parti des
*
variables globales du shell et citez des variables pour les transmettre à d'autres commandes. Cela facilite beaucoup le traitement des noms de fichiers difficiles:Notez l'utilisation de
./
- une protection contre les noms de fichiers qui peuvent contenir une avance-
.la source
Pour ouvrir un dossier contenant un espace entourer de guillemets comme
cd "Some Directory"
ou échapper à l'espace avec une barre oblique inverse, comme:cd /home/kudic/Radna\ površina
.la source
cd /home/kudic/Radna\ površina
'Radna površina'
) si vous ne voulez pas que les variables d’environnement ($VARNAME
) soient développées et que les commandes soient placées entre guillemets ou qu’elles$()
soient exécutées (ou s’il existe des guillemets doubles dans le nom du fichier).Si ce répertoire est dans votre dossier personnel, tapez:
sinon donner un chemin absolu:
s'il y a une double citation dans le nom du fichier, échapper à celle avec
\"
la source
Une autre option, mais pas la meilleure dans ce cas, consiste à utiliser des caractères génériques. Tu peux essayer:
cd *Torino*
Il est préférable d'utiliser cette méthode lorsqu'il existe un mot ou une expression distincte dans le nom d'un répertoire non partagé par d'autres. Par exemple, j'ai des points de montage / media / DataSSD et / media / DataHDD. La saisie semi-automatique ne fonctionne pas tant que je n'ai pas saisi presque la moitié du nom. Pour accéder à la partition du disque dur, je tape simplement
cd /media/*HD*
la source