Öffnen Sie die mit dem Befehl 'find' gefundene Datei

12

Dies ist wahrscheinlich eine einfache, aber ich kann es nicht herausfinden und es ist so gut wie nicht durchsuchbar. In einer Ordnerhierarchie habe ich genau eine Datei vom Typ xyz. Ich möchte diese Datei finden und mit einem Terminalbefehl öffnen.

find . -name *.xyz

Dadurch wird die gesuchte Datei zurückgegeben. Wie öffne ich es jetzt automatisch, ohne den Namen einzugeben?

find . -name *xyz | open

Das funktioniert nicht. Es heißt, der Befehl open wurde nicht gefunden.


quelle
3
Um welche Art von Datei handelt es sich? Wenn es sich nicht um eine ausführbare Datei handelt, mit welchem ​​Programm möchten Sie die Datei öffnen? Oh , was Windows getan hat , um unsere Bevölkerung = /
chown
Dies gehört wahrscheinlich auf Superuser ...
Retracile
1
Ich bin auf einem Mac nicht Windows ... und ich möchte die Datei mit dem Standardprogramm öffnen.
1
finden . -name * xyz | xargs öffnen und finden. -name * .xyz -exec open {} \; beide arbeiteten. Vielen Dank.
Ich bin froh, dass Sie eine Lösung gefunden haben. Vergessen Sie nicht, die Lösung zu markieren, die für Sie am besten funktioniert hat. Andere werden Ihr Akzeptanzverhältnis sehen und dies ist ein langer Weg, wenn Sie zukünftige Fragen stellen. Benutzer mit einer niedrigeren Akzeptanzquote stellen häufig fest, dass ihre Fragen ignoriert werden. =)
Matchew

Antworten:

10

@retracile ist korrekt. Sie müssen es mit "etwas" öffnen. Ich bevorzuge jedoch die Verwendung von exec gegenüber xargs.

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

Dies wird zurückgeben cat fileFound.xyz; cat fileFound2.xyx;usw. Sie erwarten jedoch nur eine Datei zu finden.

Beachten Sie, dass ein Wechsel \;zu +zu cat fileFound.xyz fileFound2.xyzje nach Fall zurückkehren würde, je später möglicherweise die bevorzugte Wahl.

Für mehr dazu möchte ich Sie auf diese Frage hinweisen

Matchew
quelle
6

Der gesuchte Befehl wird aufgerufen xdg-open

Versuchen Sie Ihren Befehl damit:

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

Sie müssen wissen, mit welchem ​​Programm Sie die Datei öffnen möchten. Wenn es sich um ein Bild handelt, können Sie gwenview oder etwas anderes verwenden.

Die Eingabe und Umwandlung in Argumente erfolgt mit xargs. Und du wirst dieser Wildcard entkommen wollen ...

find . -name \*xyz | xargs gwenview

Und um Leerzeichen in Dateinamen zu behandeln ....

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

Wie andere bereits betont haben, ist Ihre Frage nicht spezifisch genug, um sie klar zu beantworten. Erraten Sie also eine andere mögliche Bedeutung: Wenn Sie meinen, dass Sie es als ausführbare Datei ausführen möchten (was bedeutet, dass Ihr Programm eine ausführbare Datei ist), teilen Sie der Shell mit, dass Sie die Ausgabe des Befehls find als Teil der Befehlszeile ersetzen möchten ::

$(find . -name *.xyz)
mkj
quelle
0

Wenn Sie alle Dateien, die von findin separaten Registerkarten gefunden wurden, in einer einzigen Instanz von vim öffnen möchten, können Sie Folgendes tun:

find . -name \*xyz | xargs vim -p
Cory Klein
quelle