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.
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.
open *feedback*
das eigentlich nicht genug?Antworten:
xargs erstellt und führt Befehlszeilen über die Standardeingabe aus .
Die Syntax ist einfach:
Dies funktioniert nicht, wenn der Dateiname ein Leerzeichen enthält. Zum Beispiel für eine Datei mit dem Namen
foo bar
:Das obige würde versuchen, eine aufgerufene Datei
foo
und dann eine aufgerufene Datei zu öffnenbar
, da das Leerzeichen normalerweise Argumente trennt.In diesem Fall können Sie den Dateinamen in Anführungszeichen setzen:
Dieser Ansatz kann jedoch fehlschlagen, wenn der Dateiname Leerzeichen enthält.
Eine andere Option wäre find , bei der Pipes ganz vermieden werden:
Hier wird
-maxdepth 1
die 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:
Dies funktioniert auch dann, wenn die Datei Leerzeichen enthält.
quelle