Utilizza il percorso file incompleto nel terminale

1

Nel terminale esiste un modo per Terminal di indovinare un file basato su un percorso di file incompleto? Per esempio: Invece di /Users/me/foo1/foo2/foo3/foo4/TargetFile , c'è un modo per fare solo /foo3/foo4/TargetFile ? Voglio poter accedere al file, non importa dove sia. Grazie.

    
posta Ben A. 19.08.2017 - 00:19
fonte

3 risposte

2

Se il percorso del file è relativo alla directory di lavoro corrente è possibile utilizzare:

find . -name targetfile

Potresti racchiuderlo in una funzione di shell:

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

# Usage
mylocate targetfile

In zsh puoi utilizzare la funzione globstar:

printf '%s\n' **/targetfile

In ksh:

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

In bash4:

shopt -s globstar
printf '%s\n' **/targetfile
    
risposta data 19.08.2017 - 12:51
fonte
1

Ci sono un paio di cose che puoi fare:

Utilizza ~

Nell'esempio che hai citato, puoi usare la tilde come scorciatoia per la tua directory home

~/foo1/foo2/foo3/foo4/TargetFile

Se vuoi accedere a un file "non importa dove si trova", crea un link simbolico e assicurati che si trovi nel tuo percorso

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

(Puoi mettere la prima riga in .bash_profile in modo che sia disponibile in ogni sessione)

Il tuo percorso può essere ovunque tu voglia - sto solo usando la tua home directory come esempio.

    
risposta data 19.08.2017 - 00:54
fonte
1

Se sai che il file di destinazione si trova nel $ PATH dell'utente, puoi dire

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

Altrimenti, puoi trovare il file 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 ...
    
risposta data 19.08.2017 - 02:15
fonte

Leggi altre domande sui tag