1 votes

Utilisez un chemin de fichier incomplet dans le terminal

Est-il possible dans le terminal que Terminal devine un fichier à partir d'un chemin de fichier incomplet? Par exemple : Au lieu de /Utilisateurs/moi/foo1/foo2/foo3/foo4/FichierCible, est-il possible de simplement faire /foo3/foo4/FichierCible? Je veux pouvoir accéder au fichier peu importe où il se trouve. Merci.

0 votes

Vous pouvez créer une variable d'environnement pour ce fichier dans le .bash_profile. Quelque chose comme : myFile="$HOME/foo1/foo2/foo3/foo4/TargetFile. Après cela, accédez au fichier avec $myFile.

0 votes

Est-ce que cela fonctionnerait sur n'importe quel ordinateur, ou juste le mien? J'ai besoin que ce soit universel.

0 votes

Uniquement dans le vôtre. Sur d'autres Mac ou Linux, vous devez taper manuellement la variable la première fois.

2voto

Michael Zhou Points 167

Si le chemin du fichier est relatif au répertoire de travail actuel, vous pouvez utiliser :

find . -name targetfile

Vous pouvez envelopper ceci dans une fonction shell :

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

# Usage
mylocate targetfile

Dans zsh, vous pouvez utiliser la fonction globstar :

printf '%s\n' **/targetfile

Dans ksh :

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

Dans bash4 :

shopt -s globstar
printf '%s\n' **/targetfile

1 votes

Je utilise souvent nullglob avec globstar -- de cette façon, vous n'obtenez pas la chaîne littérale "**/fichiercible" s'il n'y a pas un tel fichier.

1voto

Douglas Points 10417

Il y a quelques choses que vous pouvez faire:

Utilisez le ~

Dans l'exemple que vous avez cité, vous pouvez utiliser le tilde comme raccourci vers votre répertoire personnel

~/foo1/foo2/foo3/foo4/TargetFile

Si vous voulez accéder à un fichier "peu importe où il se trouve" créez un lien symbolique et assurez-vous qu'il est dans votre chemin

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

(Vous pouvez mettre la première ligne dans votre .bash_profile pour qu'elle soit disponible dans chaque session)

Votre chemin peut être n'importe où vous le souhaitez - je prends simplement votre répertoire personnel comme exemple.

0 votes

Mon problème est que je veux y accéder sur n'importe quel ordinateur, où je ne connaîtrais que l'emplacement du fichier dans des dossiers imbriqués dont je connais les noms. Cela signifie que je pourrais ne pas savoir où l'utilisateur a placé le fichier.

0 votes

Les variables d'environnement, les alias, les chemins, etc. sont différents pour chaque utilisateur. Vous devriez les mettre dans chaque profil et dans le profil squelette afin qu'ils se propagent aux nouveaux utilisateurs.

0 votes

Que veux-tu dire par là? Aurais-tu l'obligeance d'expliquer?

1voto

glenn jackman Points 1869

Si vous savez que le fichier cible se trouve dans le $PATH de l'utilisateur, vous pouvez dire

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

Sinon, vous pouvez trouver le fichier avec

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 ...

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X