¿Atajo de línea de comando para el directorio actual similar a ~ para el directorio de inicio?

24

Cuando uso el comando cp o move en una ventana de terminal, actualmente estoy con bash en cierta carpeta como esta.

NES@server:~/Desktop/dir1$

Y ahora quiero copiar un archivo desde aquí ~/anotherdir/dir2en la carpeta elegida actual en bash (dir1), usaría el comando

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

¿existe una cadena de acceso directo para hacer referencia al directorio elegido actual? Entonces, en este ejemplo, no tengo que proporcionar la ruta completa al directorio de destino, pero el comando sabe que debería usar el directorio elegido actual en bash. es decir, como ~ significa el directorio de inicio?

NES
fuente

Respuestas:

42

Su directorio actual es .. Entonces, cp /foo/fam/foo .copia el archivo a su directorio actual.

La construcción análoga para "un directorio arriba", o el directorio padre del directorio de trabajo actual, es de dos puntos, es decir, ... (Gracias @djeikyb.)

Entonces, desde /usr/house/firstfloor/basement, cd ..te lleva un nivel hasta /usr/house/firstfloor.

En el mismo ejemplo (a partir de /usr/house/firstfloor/basement, el comando cd ../..lo llevaría a /usr/house.

También puede usar $PWDcon echopara obtener su directorio actual:

echo $PWD

Por cierto, $OLDPWDle dará su directorio anterior. (Que bashtambién puede alcanzar escribiendo cd -).

belacqua
fuente
3
Un buen momento como cualquier otro para aprender eso ..significa un directorio más bajo. Se puede usar varias veces, es decircd ../..
djeikyb
1
@djeikyb - te refieres a lo anterior, estoy seguro. Entonces, cd ..lo llevará al directorio padre de su directorio actual. Buen punto.
belacqua
1
Y lo mencionaría popdy pushdeso se está convirtiendo en un ensayo.
belacqua
2
Una pequeña diferencia para recordar: .y ..son de nivel de sistema de archivos, por lo que cualquier programa los aceptará. Por otro lado, los accesos directos como ~y ~-son parte del shell.
Grawity
2
+1 para cd -; No sabía que existía.
jg-faustus
6

Puede usar $ (pwd), se resolverá a la salida del comando pwd.

Ejemplo:

echo $(pwd)
João Pinto
fuente
1
O simplemente echo $PWD.
ulidtko
3

./ representa el directorio actual. Entonces puede usar el comando cp ~/anotherdir/dir2/file ./Esto copiará el archivo "archivo" en el directorio de trabajo correcto.

binW
fuente
3
No necesitas la barra "." es suficiente también la barra inclinada (como delimitador del componente de ruta) solo es necesaria si desea colocar algún otro componente de ruta después de ella, pero luego es más fácil dejarse solo ./ ya que las rutas relativas significan comenzar de todos modos con el directorio actual :)
LGB
Lo sé / no es obligatorio pero. solo se siente confuso para mí porque. también se usa para ejecutar comandos desde un archivo en el shell actual, por ejemplo, ". envsetup.sh". Entonces, agregar un / al final lo hace más claro.
binW
1
Tangencialmente, si no ln -s /some/long/path/to/get/to/cake tiene un segundo argumento , colocará el cakeenlace simbólico en su actual directamente. Muy bueno para los perezosos. Guarda a ..
belacqua
2

Para usar el directorio actual como el directorio de destino, use un solo punto ' .'

Respuesta larga

Usando su ejemplo, escribiría: cp ~/anotherdir/dir2/file .

Para ver el punto ., ..y ../../los nombres de directorio en la acción, copiar y pegar los siguientes comandos en la terminal:

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

El resultado del comando de árbol aparece así:

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

3 directories, 3 files

La .salida en la parte superior del árbol representa el nuevo directorio actual a que es el abuelo al a/b/cque navegamos usando el cd ../../comando. Debajo avemos los subdirectorios a/b, a/b/cya/b/c2

Análisis línea por línea

Primero creamos 4 directorios en una sola línea &&para unir varias líneas.

Luego cambiamos al directorio a/b/c, que es el directorio actual para los siguientes comandos de copia:

  • En el primer comando de copia ( cp) establecemos el destino en nuestro directorio actual ( c ) con ..
  • En el segundo comando de copia, establecemos el destino en el directorio padre ( b ) con ...
  • En el tercer comando de copia, establecemos el destino en el directorio hermano ( c2 ) con../c2

Luego, como se indicó anteriormente, cambiamos el directorio actual ay ejecutamos el treecomando para mostrar todos los directorios y archivos en a.

Limpiar

Una vez que hayamos terminado, eliminamos los tres directorios y archivos con:

cd ~/
rm -r tree
WinEunuuchs2Unix
fuente
1

Puede usar el punto ( .), la ~+ expansión de tilde , el pwdcomando o la variable $ PWD para representar el directorio de trabajo actual (CWD). Todos estos comandos pueden hacer eso:

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

Sí (como otros han señalado), el directorio actual es ".", Por eso puede iniciar programas / script desde el directorio actual con ./script (solo el script no funcionará a menos que. No sea parte de PATH, lo cual no se recomienda aunque). Usar $ PWD o $ (pwd) es un poco exagerado, incluso si otros mencionaron que usar un solo punto es más corto, seguro :) ".." es el directorio padre, seguro que "/" es la raíz. También es bueno mencionar que "cd -" lo colocará en el directorio anterior donde estaba antes de cambiar cwd (directorio de trabajo actual). También puede ser útil en el trabajo diario. Un solo comando "cd" sin ningún otro en la línea de comando lo colocará en "~" (su hogar).

LGB
fuente
1
$PWDno es una exageración al crear enlaces simbólicos a rutas absolutas.
ulidtko
Pensé en el ejemplo "cp" donde está, seguro. Incluso con enlaces simbólicos depende de la situación: "ln -s / this / file". creará un enlace simbólico en el directorio actual señalando el archivo / this / file con el nombre "file" (la gente a menudo piensa que es como "cp" simplemente no copiar datos, solo algún tipo de enlace: no es una definición correcta pero es un buen comienzo ) Sin embargo, la construcción opuesta: "ln -s. / This / dir" es algo interesante (cree un enlace simbólico como / this / dir con referencias para el directorio actual), pero creo que está fuera del alcance del tema original, y tampoco era la pregunta.
LGB