Parfois, je veux exécuter certains fichiers, mais je ne veux pas naviguer jusqu'au dossier.
Si je connais le nom du fichier et que find -name file_name.py
ne renvoie qu'un résultat, puis-je l'utiliser?
Par exemple, au lieu de naviguer dans un dossier spécifique et d’appeler:
python file_name.py
Puis-je écrire:
python [ find -name file_name.py ]
ou
python [ locate file_name.py ]
Ou une sorte de variante pour "rechercher sur tout mon ordinateur ce nom de fichier et l'utiliser"? De préférence sur une ligne.
Je pense que tu cherches:
python $(find -name myscript.py)
Ajoutez la ligne shopt -s globstar
au fichier .bashrc
de votre répertoire personnel. (Pour simplement essayer ceci, tapez ceci sur la ligne de commande, cela ne prendra effet que dans votre Shell actuel.)
Vous pouvez ensuite utiliser **/
pour signifier "dans le répertoire en cours ou dans un sous-répertoire, et ainsi de suite de manière récursive", c’est-à-dire la même chose que les simples commandes find
.
python **/myscript.py
Avertissement: **/
traverse des liens symboliques vers des répertoires, alors que find
ne le fait pas. En bash, vous ne pouvez pas éviter cela. Dans zsh, **/
est disponible tel quel et ne traverse pas les liens symboliques (***/
pour les rares cas où vous souhaitez parcourir des liens symboliques).
Juste pour montrer qu'il y a toujours plus d'une façon de faire les choses (même sans utiliser Perl):find -name file_name.py -exec python {} \;
fonctionnera également. L'option exec de find exécute la commande suivante pour chaque fichier trouvé. Dans cette commande, {}
agit comme un espace réservé pour le fichier et \;
signifie la fin de la commande.
Vous pouvez stocker la sortie de find dans une variable et en faire ce que vous voulez comme suit:
file=`find -name file_name.py` && python $file
find -name file_name.py
recherchera les fichiers nommés file_name.py
et enregistrera le résultat dans la variable file
. Si la commande aboutit (les résultats sont obtenus sans erreur), python interprète $file
.
Un autre:
xargs -0 python < <(find -name my_script.py -print0 -quit)
Maintenant, comme devoir, essayez de déterminer les avantages, les inconvénients et les différences de toutes les méthodes présentées ici.