Wie öffne ich mehrere Dateien aus der Ausgabe "find"?

10

Ich weiß, dass ich mehrere Dateien in einem Verzeichnis wie folgt öffnen kann:

find -name *.foo -xargs <command> {} \;

Dies funktioniert, aber wenn Sie versuchen, eine Reihe von Textdateien gleichzeitig in gedit zu öffnen, werden diese nacheinander geöffnet (wenn eine Datei geschlossen wird, wird die nächste geöffnet).

Ich möchte alle diese Dateien gleichzeitig öffnen. Wie kann ich das erreichen?

jottr
quelle

Antworten:

15

Zu handeln , auf mehrere Dateien auf einmal mit find, verwenden Sie +statt \;:

find . -name '*.foo' -exec gedit {} +

Mit zsh oder mit bash ≥4, wenn Sie shopt -s globstarin eingeben ~/.bashrc, können **/Sie in Unterverzeichnisse zurückkehren:

gedit **/*.foo

Zsh hat auch viele Glob-Qualifikanten, die die meisten Verwendungen von ersetzen können find.

Gilles 'SO - hör auf böse zu sein'
quelle
könnte jemand vorschlagen, wie man es unter Mac OS X ausführt?
Andilabs
@andi von mir gelöst. Aber wenn jemand etwas kürzeres vorschlägt oder SublimeText zwingt, sich in separaten Registerkarten anstatt in Fenstern zu öffnen, wird dies sehr geschätzt.
Andilabs
@andi Dies ist ein Problem mit SublimeText. Sie sollten es als separaten Thread fragen.
Gilles 'SO - hör auf böse zu sein'
Trotzdem denke ich, dass es sich um ein genaues Bash-Format handelt, denn wenn ich es zum Beispiel ausführe, wird open -a SublimeText admin.py forms.pyes in einem Fenster mit zwei Registerkarten geöffnet.
Andilabs
2

Unter Mac OS X Bash können Sie Folgendes ausführen:

for file in $(find . -name "*.py"); do open -a SublimeText $file; done. 

Ein Nachteil ist, dass es in einem neuen Fenster von Sublime geöffnet wird, anstatt eine neue Registerkarte zu verwenden.

Andilabs
quelle
0

Ich denke, dass Sie in diesem Fall verwenden könnten

find ./ -name \*.foo | xargs gedit
pbm
quelle
1
Dies funktioniert nicht, wenn der Dateiname Sonderzeichen (Leerzeichen oder \'") enthält, da xargsdie Eingabe in Anführungszeichen gesetzt werden muss, finddie nicht erzeugen. Verwenden Sie entweder find … -print0 | xargs -0 …oder verwenden Sie die einfachere find … -exec … {} +.
Gilles 'SO - hör auf böse zu sein'
Auch wenn dies in diesem Fall nicht zutrifft, -print0 | xargs -0besteht das Problem, dass stdin verschlungen wurde und nicht mehr an das Terminal angeschlossen ist. Ein Problem, wenn Sie versuchen, einen Textmodus-Editor zu verwenden.
Derobert