¿Cómo abrir varios archivos desde la salida `find`?

10

Sé que puedo abrir varios archivos encontrados en un directorio de esta manera:

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

Esto funciona, pero al intentar abrir un montón de archivos de texto en gedit al mismo tiempo, los abre sucesivamente (cuando se cierran un archivo, se abre el siguiente).

Me gustaría abrir todos esos archivos al mismo tiempo. ¿Cómo puedo conseguir esto?

jottr
fuente

Respuestas:

15

Para actuar en varios archivos a la vez con find, use en +lugar de \;:

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

Con zsh, o con bash ≥4 si coloca shopt -s globstarsu ~/.bashrc, puede usar **/para recurrir a subdirectorios:

gedit **/*.foo

Zsh también tiene muchos calificadores globales que pueden reemplazar la mayoría de los usos de find.

Gilles 'SO- deja de ser malvado'
fuente
¿Alguien podría sugerir cómo ejecutarlo en Mac OS X?
andilabs 01 de
@andi resuelto por mí mismo. Pero si alguien propone algo más corto u obligando a SublimeText a abrirse en pestañas separadas, en lugar de ventanas, será muy apreciado.
andilabs 01 de
@andi Este es un problema con SublimeText, debe preguntarlo como un hilo separado.
Gilles 'SO- deja de ser malvado'
De todos modos, creo que se trata del formato bash exacto, porque si ejecuto, por ejemplo, open -a SublimeText admin.py forms.pyse abre en una ventana con dos pestañas.
andilabs 01 de
2

En Mac OS X bash puedes ejecutar algo como:

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

Un inconveniente es que se abre en una nueva ventana de Sublime en lugar de usar una nueva pestaña.

andilabs
fuente
0

Creo que en este caso podrías usar

find ./ -name \*.foo | xargs gedit
pbm
fuente
1
Esto no funcionará si el nombre del archivo contiene caracteres especiales (espacios en blanco o \'"), porque xargsrequiere que su entrada se cite de una manera que findno se produzca. O usa find … -print0 | xargs -0 …, o usa el más simple find … -exec … {} +.
Gilles 'SO- deja de ser malvado'
Además, aunque no se aplica en este caso, -print0 | xargs -0tiene el problema de que stdin se ha engullido y ya no está conectado al terminal. Un problema si estás intentando usar un editor de modo de texto.
derobert