una txt texto obtener nombres manipulaciĆ³n manejo los directorios crear creacion como comandos carpetas carpeta archivos archivo bash

bash - txt - Obtener la ruta del directorio de archivos de la ruta del archivo



manejo de archivos y directorios (6)

En Bash, si VAR="/home/me/mydir/file.c" , ¿cómo obtengo "/home/me/mydir" ?


Aquí hay un script que utilicé para el recorte recursivo. Reemplace $ 1 con el directorio que desee, por supuesto.

BASEDIR="$1" IFS=$''/n'' cd $BASEDIR for f in $(find . -type f -name '' *'') do DIR=$(dirname "$f") DIR=${DIR:1} cd $BASEDIR$DIR rename ''s/^ *//'' * done


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ó siendo readlink .

fname=''txtfile'' echo $(dirname "$fname") # output: . echo $(readlink -f "$fname") # output: /home/me/work/txtfile

A continuación, puede combinar los dos para obtener sólo el directorio.

echo $(dirname $(readlink -f "$fname")) # output: /home/me/work


Estaba jugando con esto y se me ocurrió una alternativa.

$ VAR=/home/me/mydir/file.c $ DIR=`echo $VAR |xargs dirname` $ echo $DIR /home/me/mydir

La parte que me gustó es que fue fácil extender el árbol de respaldo:

$ DIR=`echo $VAR |xargs dirname |xargs dirname |xargs dirname` $ echo $DIR /home


Si le importa que los archivos de destino sean enlaces simbólicos, en primer lugar puede verificarlo y obtener el archivo original. La siguiente cláusula if puede ayudarte.

if [ -h $file ] then base=$(dirname $(readlink $file)) else base=$(dirname $file) fi


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.


$ export VAR=/home/me/mydir/file.c $ export DIR=${VAR%/*} $ echo "${DIR}" /home/me/mydir $ echo "${VAR##*/}" file.c

Para evitar la dependencia con basename y dirname