Collegamento della riga di comando per la directory corrente simile a ~ per la directory home?


24

Quando uso il comando cp o move in una finestra di terminale, attualmente sto con bash in una determinata cartella come questa.

NES@server:~/Desktop/dir1$

E ora voglio copiare un file da qui ~/anotherdir/dir2nella cartella attualmente selezionata in bash (dir1) vorrei usare il comando

cp ~/anotherdir/dir2/file ~/Desktop/dir1

esiste una stringa di scelta rapida per fare riferimento alla directory attualmente selezionata? Quindi, in questo esempio, non devo fornire il percorso completo per la directory di destinazione, ma il comando sa che dovrebbe usare l'attuale directory scelta in bash? cioè come ~ sta per home directory?

Risposte:


42

La tua directory attuale è .. Quindi, cp /foo/fam/foo .copia il file nella directory corrente.

La costruzione analoga per "una directory in su", o la directory principale della directory di lavoro corrente, è di due punti, ovvero ... (Grazie @djeikyb.)

Quindi, da /usr/house/firstfloor/basement, cd ..ti porta a un livello fino a /usr/house/firstfloor.

Nello stesso esempio (a partire da /usr/house/firstfloor/basement, il comando ti cd ../..porterebbe a /usr/house.

È inoltre possibile utilizzare $PWDcon echoper ottenere la directory corrente:

echo $PWD

Per inciso, $OLDPWDti darà la tua directory precedente. (Che in bashte puoi raggiungere anche digitando cd -.)


3
Buon momento come uno per imparare ciò ..significa una directory in basso. Può essere usato più volte, ad esempiocd ../..
djeikyb l'

1
@djeikyb - volevi dire sopra, ne sono sicuro. Quindi, cd ..ti porterà nella directory principale della tua directory corrente. Buon punto.
belacqua,

1
E vorrei menzionare popde pushdma questo si sta trasformando in un saggio.
belacqua,

2
Una piccola differenza da ricordare: .e ..sono a livello di filesystem, quindi qualsiasi programma li accetterà. D'altra parte, scorciatoie come ~e ~-fanno parte della shell.
gravità

2
+1 per cd -; non sapevo che esistesse.
jg-faustus,

6

Puoi usare $ (pwd), si risolverà nell'output dal comando pwd.

Esempio:

echo $(pwd)

1
O semplicemente echo $PWD.
Ulidtko,

3

./ rappresenta la directory corrente. Quindi puoi usare il comando cp ~/anotherdir/dir2/file ./Questo copierà il file "file" nella directory di lavoro di currect.


3
Non hai bisogno della barra "." è anche abbastanza. la barra (come delimitatore del componente del percorso) è necessaria solo se si desidera inserire un altro componente del percorso dopo di esso, ma è più semplice lasciarlo ./ poiché i percorsi relativi si intendono a partire comunque dalla directory corrente :)
LGB

so / non è richiesto ma. solo mi sento confuso per me coz. è anche usato per eseguire comandi da un file nella shell corrente, ad es. ". envsetup.sh". Quindi aggiungere un / alla fine lo rende più chiaro.
BinW,

1
Tangenzialmente, se lo fai ln -s /some/long/path/to/get/to/cake senza un secondo argomento , inserirà direttamente il cakecollegamento simbolico nel tuo attuale. Ottimo per i pigri. Salva a ..
belacqua,

2

Per usare la directory corrente come directory di destinazione usa un singolo punto ' .'

Risposta lunga

Usando il tuo esempio, dovresti digitare: cp ~/anotherdir/dir2/file .

Per vedere il punto ., ..e ../../nomi delle directory in azione, copiare e incollare i seguenti comandi nel Terminale:

mkdir a && mkdir a/b && mkdir a/b/c && mkdir a/b/c2
cd a/b/c
cp /etc/default/grub .
cp /etc/default/grub ..
cp /etc/default/grub ../c2
cd ../../
tree

L'output del comando tree appare così:

.
└── b
    ├── c
       └── grub
    ├── c2
       └── grub
    └── grub

3 directories, 3 files

L' .output nella parte superiore dell'albero rappresenta la nuova directory corrente a che è il nonno di a/b/ccui abbiamo navigato utilizzando il cd ../../comando. Sotto avediamo le sottodirectory a/b, a/b/cea/b/c2

Analisi riga per riga

Per prima cosa abbiamo creato 4 directory su una riga usando &&per unire più righe insieme.

Quindi siamo passati alla directory a/b/c, che è la directory corrente per i seguenti comandi di copia:

  • Nel primo comando di copia ( cp) impostiamo la destinazione sulla nostra directory corrente ( c ) con ..
  • Nel secondo comando di copia impostiamo la destinazione nella directory principale ( b ) con ...
  • Nel terzo comando di copia impostiamo la destinazione nella directory dei fratelli ( c2 ) con../c2

Quindi, come affermato in precedenza, abbiamo modificato la directory corrente in aed eseguito il treecomando per visualizzare tutte le directory e i file in a.

Pulire

Al termine, rimuoviamo le tre directory e file con:

cd ~/
rm -r tree


1

È possibile utilizzare il punto ( .), l' ~+ espansione tilde , il pwdcomando o la variabile $ PWD per rappresentare la directory di lavoro corrente (CWD). Tutti questi comandi possono farlo:

  1. mv file_old_dir .
  2. mv file_old_dir ~+
  3. mv file_old_dir $(pwd)
  4. mv file_old_dir $PWD

0

Sì (come altri hanno notato), la directory corrente è ".", Ecco perché puoi avviare programmi / script dalla directory corrente con ./script (solo lo script non funzionerà a meno che. Non sia la parte di PATH, che non è raccomandato anche se). L'uso di $ PWD o $ (pwd) è un po 'eccessivo, anche se altri hanno detto che, usando un singolo punto è più breve, sicuramente :) ".." è la directory padre, sicuramente "/" è la radice. Bello anche ricordare che "cd -" ti porterà nella directory precedente dove eri prima di cambiare cwd (directory di lavoro corrente). Può essere utile anche nel lavoro quotidiano. Un singolo comando "cd" senza nessun altro nella riga di comando ti metterà in "~" (la tua casa).


1
$PWDnon è eccessivo quando si creano collegamenti simbolici a percorsi assoluti.
Ulidtko,

Ho pensato all'esempio "cp" dove si trova, di sicuro. Anche con i collegamenti simbolici dipende dalla situazione: "ln -s / this / file". creerà un collegamento simbolico nella directory corrente puntando il file / this / file con il nome "file" (la gente spesso pensa che sia come con "cp" semplicemente non copia i dati, solo un qualche tipo di collegamento: non è una definizione corretta ma è un buon inizio ). Tuttavia, la costruzione opposta: "ln -s. / This / dir" è un po 'interessante (crea un link simbolico come / this / dir con riferimenti per la directory corrente), ma penso che sia fuori dall'ambito dell'argomento originale, e non era nemmeno la domanda.
LGB,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.