Usar ruta de archivo incompleta en el terminal

1

¿En la terminal hay una manera de que la Terminal adivine un archivo basándose en una ruta de archivo incompleta? Por ejemplo: En lugar de /Users/me/foo1/foo2/foo3/foo4/TargetFile , ¿hay una manera de hacer /foo3/foo4/TargetFile ? Quiero poder acceder al archivo sin importar dónde esté. Gracias.

    
pregunta Ben A. 19.08.2017 - 00:19

3 respuestas

2

Si la ruta del archivo es relativa al directorio de trabajo actual, podría utilizar:

find . -name targetfile

Podrías envolver esto en una función de shell:

mylocate () {
    find . -name "$1"
}

# Usage
mylocate targetfile

En zsh puedes usar la función globstar:

printf '%s\n' **/targetfile

En ksh:

set -G
printf '%s\n' **/targetfile

En bash4:

shopt -s globstar
printf '%s\n' **/targetfile
    
respondido por el fd0 19.08.2017 - 12:51
1

Hay un par de cosas que puedes hacer:

Usa el ~

En el ejemplo que citó, puede usar la tilde como acceso directo a su directorio de inicio

~/foo1/foo2/foo3/foo4/TargetFile

Si quieres acceder a un archivo "no importa dónde esté", crea un enlace simbólico y asegúrate de que esté en tu ruta

PATH=$PATH:/Users/me
export $PATH
ln -s /Users/me/foo1/foo2/foo3/foo4/TargetFile /User/me/TargetFile'

(Puedes poner la primera línea en tu .bash_profile para que esté disponible en cada sesión)

Su ruta puede estar en cualquier lugar que desee, solo estoy usando su directorio de inicio como ejemplo.

    
respondido por el Allan 19.08.2017 - 00:54
1

Si sabe que el archivo de destino está en $ PATH del usuario, puede decir

target=$(which TargetFile)
"$target" arg ...

De lo contrario, puedes encontrar el archivo con

while IFS= read -r possible_target; do
    if is_this possible_target_the_one_you_want; then
        target=$possible_target
        break
    fi
done < <(locate '*/TargetFile')
"$target" arg ...
    
respondido por el glenn jackman 19.08.2017 - 02:15

Lea otras preguntas en las etiquetas