Datei direkt nach grep öffnen

0

Ich bekomme ein Problem beim Piping unter Linux,

ls | grep feedback

Ich habe einen Alias ​​für xdg-open, der offen ist, wie man den Dateinamen von grep direkt öffnen kann

das funktioniert nicht

ls | grep feedback | open
Noor
quelle
1
Wäre open *feedback*das eigentlich nicht genug?
Slhck

Antworten:

5

xargs erstellt und führt Befehlszeilen über die Standardeingabe aus .

Die Syntax ist einfach:

ls | grep feeback | xargs open

Dies funktioniert nicht, wenn der Dateiname ein Leerzeichen enthält. Zum Beispiel für eine Datei mit dem Namen foo bar:

ls | grep foo | xargs open

Das obige würde versuchen, eine aufgerufene Datei foound dann eine aufgerufene Datei zu öffnen bar, da das Leerzeichen normalerweise Argumente trennt.

In diesem Fall können Sie den Dateinamen in Anführungszeichen setzen:

ls | grep foo | xargs -I '{}' open '{}'

Dieser Ansatz kann jedoch fehlschlagen, wenn der Dateiname Leerzeichen enthält.


Eine andere Option wäre find , bei der Pipes ganz vermieden werden:

find -maxdepth 1 -name '*foo*' -exec open '{}' \;

Hier wird -maxdepth 1die Suche nur im aktuellen Verzeichnis (dh ohne Unterverzeichnisse) durchgeführt, -name '*foo*'nach Dateien gesucht, deren Name die Zeichenfolge foo enthält -exec open {} \;, und {}durch den gefundenen Dateinamen ersetzt. find behandelt automatisch Sonderzeichen.


Durch Befehlsersetzung kann ein ähnliches Ergebnis erzielt werden:

open "$(ls | grep feedback)"

Dies funktioniert auch dann, wenn die Datei Leerzeichen enthält.

Dennis
quelle
Vorsichtsmaßnahme, wenn der Dateiname Leerzeichen enthält. Ich habe das zu deiner Antwort hinzugefügt. Wenn Sie der Meinung sind, dass die Änderung zu radikal ist, können Sie einen Rollback durchführen.
Slhck