Ouvrir un fichier trouvé avec la commande 'find'


12

C'est probablement facile, mais je ne peux pas le comprendre et c'est à peu près impossible à rechercher. Dans une hiérarchie de dossiers, j'ai exactement un fichier de type xyz. Je veux trouver ce fichier et l'ouvrir avec une commande de terminal.

find . -name *.xyz

Cela renverra le fichier que je recherche. Maintenant, comment puis-je l'ouvrir automatiquement, sans taper le nom?

find . -name *xyz | open

Ça ne marche pas. Il dit qu'il n'a pas trouvé la commande open.


3
De quel type de fichier s'agit-il? Si ce n'est pas un fichier exécutable, avec quel programme voulez-vous ouvrir le fichier? Oh ce que Windows a fait à notre population = /
chown

Cela appartient probablement au superutilisateur ...
retracile

1
Je suis sur un Mac et non sur Windows ... et je veux ouvrir le fichier avec le programme par défaut.

2
trouver . -name * xyz | xargs ouvre et trouve. -name * .xyz -exec open {} \; les deux ont fonctionné. Merci.

Je suis content que vous ayez trouvé une solution. N'oubliez pas de marquer la solution qui a fonctionné le mieux pour vous. D'autres verront votre ratio «d'acceptation» et cela contribuera grandement à poser des questions futures. Les utilisateurs avec un taux d'acceptation inférieur trouvent souvent leurs questions ignorées. =)
matchew

Réponses:


10

@retracile est correct. Vous devez l'ouvrir avec «quelque chose». Cependant, je préfère utiliser exec plutôt que xargs.

find . -name '*.xyz' -exec cat {} \;

cela retournera cat fileFound.xyz; cat fileFound2.xyx;etc .. cependant, vous vous attendez à trouver un seul fichier.

notez que le fait \;de +revenir à reviendrait cat fileFound.xyz fileFound2.xyzselon le cas, le plus tard peut-être le choix préféré.

pour en savoir plus, je voudrais vous diriger vers cette question


6

La commande que vous recherchez s'appelle xdg-open

Essayez votre commande avec:

xdg-open "$(find . -name '*xyz' | head -n1)"

6

Vous devez savoir quel programme vous souhaitez utiliser pour ouvrir le fichier. Si c'est une image, vous pouvez utiliser gwenview ou quelque chose.

Prendre des entrées et les transformer en arguments se fait avec xargs. Et vous voudrez échapper à ce caractère générique ...

find . -name \*xyz | xargs gwenview

Et pour gérer les espaces dans les noms de fichiers ....

find . -name \*xyz | xargs -d"\n" gwenview

2

Comme d'autres l'ont souligné, votre question n'est pas assez précise pour répondre clairement. Donc, deviner une autre signification possible: si vous voulez l'exécuter en tant qu'exécutable, (ce qui signifie que votre programme est un exécutable), indiquez au shell que vous souhaitez remplacer la sortie de la commande find dans le cadre de la ligne de commande :

$(find . -name *.xyz)

0

Si vous vouliez ouvrir tous les fichiers trouvés par finddans des onglets séparés dans une seule instance de vim, vous pouvez le faire:

find . -name \*xyz | xargs vim -p
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.