En Bash, si VAR="/home/me/mydir/file.c"
, ¿cómo consigo "/home/me/mydir"
?
400
dirname
y basename
son las herramientas que está buscando para extraer componentes de ruta:
$ VAR=/home/me/mydir/file.c
$ DIR=$(dirname "${VAR}")
$ echo "${DIR}"
/home/me/mydir
$ basename "${VAR}"
file.c
No son comandos internos de Bash, pero son parte del estándar POSIX (ver dirname
, basename
) y, por lo tanto, deberían estar disponibles en la gran mayoría de los sistemas que ejecutarán Bash.
Para evitar la dependencia con
basename
ydirname
fuente
En una nota relacionada, si solo tiene el nombre de archivo o la ruta relativa,
dirname
por sí solo no ayudará. Para mí, la respuesta terminó siendoreadlink
.Luego puede combinar los dos para obtener solo el directorio.
fuente
readlink -m "$fname"
paraSi le importa que los archivos de destino sean un enlace simbólico, primero puede verificarlo y obtener el archivo original. La siguiente cláusula if puede ayudarlo.
fuente
Estaba jugando con esto y se me ocurrió una alternativa.
La parte que me gustó es que fue fácil extender la copia de seguridad del árbol:
fuente
Aquí hay un script que utilicé para el recorte recursivo. Reemplace $ 1 con el directorio que desee, por supuesto.
fuente
Primero, lo he reemplazado
/
con un espacio vacío (). Luego, eliminé todos los caracteres antes de cualquier espacio vacío (
). Al final, eliminé el primer carácter que es el espacio vacío (
).
fuente
donde obtienes la ruta completa con new_path =
$(dirname ${BASH_SOURCE[0]})
. Cambia el directorio actual concd
new_path y luego ejecutapwd
para obtener la ruta completa al directorio actual.fuente