Come aprire più file dall'output `find`?


10

So di poter aprire più file trovati in una directory in questo modo:

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

Funziona, ma quando si tenta di aprire un gruppo di file di testo in gedit allo stesso tempo, li apre in successione (quando un file viene chiuso, viene aperto il successivo).

Vorrei aprire tutti quei file contemporaneamente. Come posso raggiungere questo obiettivo?

Risposte:


15

Per agire su più file contemporaneamente find, utilizzare +invece di \;:

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

Con zsh, o con bash ≥4 se si inserisce il shopt -s globstarproprio ~/.bashrc, è possibile utilizzare **/per ricorrere in sottodirectory:

gedit **/*.foo

Zsh ha anche molti qualificatori glob che possono sostituire la maggior parte degli usi di find.


qualcuno potrebbe suggerire come eseguirlo su Mac OS X?
andilabs

@andi risolto da solo. Ma se qualcuno propone qualcosa di più breve, o forzando SublimeText ad aprirsi in schede separate, piuttosto che in Windows, sarà molto apprezzato.
andilab

@andi Questo è un problema con SublimeText, dovresti chiederlo come thread separato.
Gilles 'SO- smetti di essere malvagio'

comunque penso che si tratti dell'esatto formato bash, perché se corro per esempio open -a SublimeText admin.py forms.pysi apre in una finestra con due schede.
andilab

2

Su Mac OS X bash puoi eseguire qualcosa del tipo:

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

Uno svantaggio è che si apre in una nuova finestra di Sublime invece di utilizzare una nuova scheda.


0

Penso che in questo caso potresti usare

find ./ -name \*.foo | xargs gedit

1
Questo non funzionerà se il nome del file contiene caratteri speciali (spazi bianchi o \'"), perché xargsrichiede che il suo input sia quotato in un modo che findnon produce. Utilizzare find … -print0 | xargs -0 …o utilizzare il più semplice find … -exec … {} +.
Gilles 'SO- smetti di essere malvagio' il

Inoltre, sebbene non si applichi in questo caso, -print0 | xargs -0ha il problema che stdin è stato inghiottito e non è più collegato al terminale. Un problema se stai tentando di utilizzare un editor in modalità testo.
derobert il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.