¿En la terminal hay una manera para Terminal de adivinar un archivo basado en una ruta de archivo incompleto? ¿Por ejemplo: en vez de /Users/me/foo1/foo2/foo3/foo4/TargetFile
, hay una forma de hacer /foo3/foo4/TargetFile
?
Quiero ser capaz de acceder al archivo sin importar donde sea. Gracias.
Respuestas
¿Demasiados anuncios?Si la ruta del archivo es relativa al directorio actual de trabajo su puede usar:
find . -name targetfile
Podría envolver esto en una función de shell:
mylocate () {
find . -name "$1"
}
# Usage
mylocate targetfile
En zsh
usted puede utilizar la función de globstar:
printf '%s\n' **/targetfile
En ksh:
set -G
printf '%s\n' **/targetfile
En bash4:
shopt -s globstar
printf '%s\n' **/targetfile
Hay un par de cosas que usted puede hacer:
El uso de la ~
En el ejemplo citado, puede utilizar la tilde como un acceso directo a tu directorio home
~/foo1/foo2/foo3/foo4/TargetFile
Si desea acceder a un archivo "no importa de dónde es" crear un enlace simbólico y asegúrese de que está en su camino
PATH=$PATH:/Users/me
export $PATH
ln -s /Users/me/foo1/foo2/foo3/foo4/TargetFile /User/me/TargetFile`
(Usted puede poner la primera línea en su .bash_profile
por lo que está disponible en cada sesión)
Su ruta de acceso puede ser cualquier lugar que desee - sólo estoy usando su directorio de inicio como un ejemplo.
Si sabe que el archivo de destino está en $ PATH del usuario, puede decir
target=$(which TargetFile)
"$target" arg ...
De lo contrario, puede 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 ...