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.


la source
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

matchew
la source
6

La commande que vous recherchez s'appelle xdg-open

Essayez votre commande avec:

xdg-open "$(find . -name '*xyz' | head -n1)"
static_rtti
la source
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
retracile
la source
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)
mkj
la source
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
Cory Klein
la source