full - show path linux terminal
¿Cómo obtener la ruta completa de un archivo? (30)
En las ventanas puedes: -
Mantenga presionada la tecla Mayús y haga clic con el botón derecho en un archivo que le ofrece la opción llamada
Esto copiará la ruta completa del archivo al portapapeles."Copy as Path"
En Linux puedes usar el comando: -
-
realpath yourfile
para obtener la ruta completa de un archivo como lo sugieren muchos.
¿Hay una manera fácil de imprimir la ruta completa de file.txt
?
file.txt = /nfs/an/disks/jj/home/dir/file.txt
El <command>
dir> <command> file.txt
debería imprimir
/nfs/an/disks/jj/home/dir/file.txt
Cree una función como la de abajo (refleja la ruta absoluta de un archivo con pwd y agrega el archivo al final de la ruta):
abspath() { echo $(pwd "$1")/"$1"; }
Ahora puedes encontrar cualquier ruta de archivo:
abspath myfile.ext
En Mac OSX, sigue los siguientes pasos:
-
cd
en el directorio del archivo de destino. - Escriba cualquiera de los siguientes comandos de terminal.
ls "`pwd`/file.txt"
echo $(pwd)/file.txt
- Reemplace
file.txt
con su nombre de archivo real. - Presiona enter
En un escenario similar, estoy lanzando un script cshell desde otra ubicación. Para establecer la ruta absoluta correcta del script para que se ejecute solo en el directorio designado, estoy usando el siguiente código:
set script_dir = `pwd`/`dirname $0`
$0
almacena la cadena exacta de cómo se ejecutó el script.
Por ejemplo, si el script se inició así: $> ../../test/test.csh
, $script_dir
contendrá /home/abc/sandbox/v1/../../test
Esto es ingenuo, pero tuve que hacerlo para ser compatible con POSIX. Requiere permiso para ingresar al directorio del archivo.
#!/bin/sh
if [ ${#} = 0 ]; then
echo "Error: 0 args. need 1" >&2
exit 1
fi
if [ -d ${1} ]; then
# Directory
base=$( cd ${1}; echo ${PWD##*/} )
dir=$( cd ${1}; echo ${PWD%${base}} )
if [ ${dir} = / ]; then
parentPath=${dir}
else
parentPath=${dir%/}
fi
if [ -z ${base} ] || [ -z ${parentPath} ]; then
if [ -n ${1} ]; then
fullPath=$( cd ${1}; echo ${PWD} )
else
echo "Error: unsupported scenario 1" >&2
exit 1
fi
fi
elif [ ${1%/*} = ${1} ]; then
if [ -f ./${1} ]; then
# File in current directory
base=$( echo ${1##*/} )
parentPath=$( echo ${PWD} )
else
echo "Error: unsupported scenario 2" >&2
exit 1
fi
elif [ -f ${1} ] && [ -d ${1%/*} ]; then
# File in directory
base=$( echo ${1##*/} )
parentPath=$( cd ${1%/*}; echo ${PWD} )
else
echo "Error: not file or directory" >&2
exit 1
fi
if [ ${parentPath} = / ]; then
fullPath=${fullPath:-${parentPath}${base}}
fi
fullPath=${fullPath:-${parentPath}/${base}}
if [ ! -e ${fullPath} ]; then
echo "Error: does not exist" >&2
exit 1
fi
echo ${fullPath}
Esto funcionó bastante bien para mí. No se basa en el sistema de archivos (un pro / con dependiendo de la necesidad) por lo que será rápido; y, debería ser portátil para la mayoría de cualquier * NIX. Se asume que la cadena pasada es de hecho relativa a la PWD y no a otro directorio.
function abspath () {
echo $1 | awk ''/
# Root parent directory refs to the PWD for replacement below
/^/././// { sub("^", "./") } /
# Replace the symbolic PWD refs with the absolute PWD /
/^/./// { sub("^/.", ENVIRON["PWD"])} /
# Print absolute paths /
/^/// {print} /'
}
Esto funciona tanto con Linux como con Mac OSX.
echo $(pwd)$/$(ls file.txt)
Esto funcionará tanto para el archivo como para la carpeta:
getAbsolutePath(){
[[ -d $1 ]] && { cd "$1"; echo "$(pwd -P)"; } ||
{ cd "$(dirname "$1")" || exit 1; echo "$(pwd -P)/$(basename "$1")"; }
}
Generalmente:
find `pwd` | grep <filename>
Alternativamente, solo para la carpeta actual:
find `pwd` -maxdepth 1 | grep <filename>
Junto a "readlink -f", otro comando de uso común:
$find /the/long/path/but/I/can/use/TAB/to/auto/it/to/ -name myfile /the/long/path/but/I/can/use/TAB/to/auto/it/to/myfile $
Esto también da la ruta completa y el nombre del archivo en la consola
Fuera del tema: este método solo proporciona enlaces relativos , no absolutos. El comando readlink -f
es el correcto.
Lo siguiente usualmente hace el truco:
echo $(cd $(dirname "$1") && pwd -P)/$(basename "$1")
Me gustan muchas de las respuestas ya dadas, pero esto me parece muy útil, especialmente dentro de un script para obtener la ruta completa de un archivo, incluidos los siguientes enlaces simbólicos y referencias relativas, como .
y ..
dirname `readlink -e relative/path/to/file`
Lo que devolverá la ruta completa del file
desde la ruta raíz hacia adelante. Esto se puede usar en un script para que el script sepa de qué ruta se está ejecutando, lo que es útil en un clon de repositorio que podría estar ubicado en cualquier lugar de una máquina.
basePath=`dirname /`readlink -e $0/``
Luego puedo usar la variable ${basePath}
en mis scripts para hacer referencia directamente a otros scripts.
Espero que esto ayude,
Dave
Otra utilidad de Linux, que hace este trabajo:
fname <file>
Para Mac OS X, reemplacé las utilidades que vienen con el sistema operativo y las reemplacé con una versión más nueva de coreutils. Esto le permite acceder a herramientas como readlink -f
(para ruta absoluta a archivos) y realpath
(ruta absoluta a directorios) en su Mac.
La versión Homebrew agrega una ''G'' (para las herramientas de GNU) delante del nombre del comando, por lo que los equivalentes se convierten en greadlink -f FILE
y grealpath DIRECTORY
.
Las instrucciones para instalar Coreutils / GNU Tools en Mac OS X a través de Homebrew se pueden encontrar en este artículo de StackExchange .
NB: Los comandos readlink -f
y realpath
deberían funcionar de forma inmediata para usuarios de Unix que no sean Mac.
Para Mac OS, si solo desea obtener la ruta de un archivo en el buscador, haga clic con el botón control en el archivo y desplácese hacia abajo hasta "Servicios" en la parte inferior. Obtendrá muchas opciones, incluyendo "copiar ruta" y "copiar ruta completa". Al hacer clic en uno de estos se coloca la ruta en el portapapeles.
Para obtener la ruta completa de un archivo:
1) abra su terminal en la carpeta que contiene su archivo , presionando las siguientes teclas del teclado:
CTRL + ALT + T
2) luego escriba "pwd" (acrónimo de P rint name of W orking D irectory):
your@device ~ $ pwd
¡eso es todo amigos!
Podría usar el script fpn (nombre de ruta completo) :
% pwd
/Users/adamatan/bins/scripts/fpn
% ls
LICENSE README.md fpn.py
% fpn *
/Users/adamatan/bins/scripts/fpn/LICENSE
/Users/adamatan/bins/scripts/fpn/README.md
/Users/adamatan/bins/scripts/fpn/fpn.py
fpn
no es un paquete estándar de Linux, pero es un proyecto github gratuito y abierto, y puedes configurarlo en un minuto .
Puede guardar esto en su "shell.rc" o simplemente ponerlo en la consola
function absolute_path {echo "$ PWD / $ 1"; }
alias ap = "absolute_path"
ejemplo:
ap somefile.txt
dará salida
/home/user/somefile.txt
Puede utilizar esta función. Si el nombre del archivo se proporciona sin una ruta relativa, se asume que está presente en el directorio de trabajo actual:
abspath() { old=`pwd`;new=$(dirname "$1");if [ "$new" != "." ]; then cd $new; fi;file=`pwd`/$(basename "$1");cd $old;echo $file; }
Uso:
$ abspath file.txt
/I/am/in/present/dir/file.txt
Uso con ruta relativa:
$ abspath ../../some/dir/some-file.txt
/I/am/in/some/dir/some-file.txt
Con espacios en nombre de archivo:
$ abspath "../../some/dir/another file.txt"
/I/am/in/some/dir/another file.txt
Sé que esta es una vieja pregunta ahora, pero solo para agregarla a la información aquí:
El comando de Linux which
se puede usar para encontrar la ruta de archivo de un archivo de comando, es decir
$ which ls
/bin/ls
Hay algunas advertencias a esto; consulte https://www.cyberciti.biz/faq/how-do-i-find-the-path-to-a-command-file/ .
Si estás en el mismo directorio que el archivo:
ls "`pwd`/file.txt"
Reemplace file.txt
con su nombre de archivo de destino.
Supongo que estás usando Linux.
Encontré una utilidad llamada realpath
en coreutils 8.15.
realpath realpath
/data/ail_data/transformed_binaries/coreutils/test_folder_realpath/realpath
Utilice readlink :
readlink -f file.txt
la forma más fácil que encontré es
for i in `ls`; do echo "`pwd`/$i"; done
funciona bien para mi
Sé que hay una forma más fácil de hacerlo, pero, maldita sea, si puedo encontrarlo ...
jcomeau@intrepid:~$ python -c ''import os; print(os.path.abspath("cat.wav"))''
/home/jcomeau/cat.wav
jcomeau@intrepid:~$ ls $PWD/cat.wav
/home/jcomeau/cat.wav
Funciona en Mac, Linux, * nix:
Esto le dará un csv citado de todos los archivos en el directorio actual:
ls | xargs -I {} echo "$(pwd -P)/{}" | xargs | sed ''s/ /","/g''
El resultado de esto se puede copiar fácilmente en una lista de python o en cualquier estructura de datos similar.
echo $(cd $(dirname "$1") && pwd -P)/$(basename "$1")
Esta es una explicación de lo que está sucediendo en la answer @ ZeRemz:
- Este script obtiene la ruta relativa como argumento
"$1"
- Luego obtenemos la parte dirname de esa ruta (puede pasar dir o file a este script):
dirname "$1"
- Luego colocamos
cd "$(dirname "$1")
en este directorio relativo -
&& pwd -P
y obtén un camino absoluto para ello.-P
opción evitará todos los enlaces simbólicos. - Después de eso, agregamos el nombre base a la ruta absoluta:
$(basename "$1")
- Como paso final lo hacemos
echo
.
find $PWD -type f | grep "filename"
o
find $PWD -type f -name "*filename*"
find / -samefile file.txt -print
Encontrará todos los enlaces al archivo con el mismo número de inodo que file.txt
la adición de un indicador -xdev
evitará que se crucen los límites del dispositivo ("puntos de montaje"). (Pero esto probablemente no hará que se encuentre nada si la find
no se inicia en un directorio en el mismo dispositivo que file.txt
)
Tenga en cuenta que find
puede informar múltiples rutas para un solo objeto del sistema de archivos, ya que un Inode se puede vincular mediante más de una entrada de directorio, posiblemente incluso usando nombres diferentes. Por ejemplo:
find /bin -samefile /bin/gunzip -ls
Saldrá:
12845178 4 -rwxr-xr-x 2 root root 2251 feb 9 2012 /bin/uncompress
12845178 4 -rwxr-xr-x 2 root root 2251 feb 9 2012 /bin/gunzip
fp () {
PHYS_DIR=`pwd -P`
RESULT=$PHYS_DIR/$1
echo $RESULT | pbcopy
echo $RESULT
}
Copia el texto en su portapapeles y muestra el texto en la ventana del terminal.
:)
(Copié parte del código de otra respuesta de desbordamiento de pila, pero ya no puedo encontrar esa respuesta)