Jak otworzyć wiele plików z wyjścia `find`?

10

Wiem, że mogę otworzyć wiele plików znalezionych w katalogu, takich jak:

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

Działa to, ale gdy próbujesz otworzyć jednocześnie kilka plików tekstowych w gedit, otwiera je sukcesywnie (gdy jeden plik jest zamykany, następny jest otwierany).

Chciałbym otworzyć wszystkie te pliki jednocześnie. Jak mogę to osiągnąć?

jottr
źródło

Odpowiedzi:

15

Aby działać na wielu plikach jednocześnie find, użyj +zamiast \;:

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

W przypadku zsh lub bash ≥4, jeśli umieścisz shopt -s globstarw swoim ~/.bashrc, możesz użyć, **/aby przeszukiwać podkatalogi:

gedit **/*.foo

Zsh ma również wiele globalnych kwalifikatorów, które mogą zastąpić większość zastosowań find.

Gilles „SO- przestań być zły”
źródło
czy ktoś mógłby zasugerować, jak uruchomić go w systemie Mac OS X?
andilabs
@i rozwiązane przeze mnie. Ale jeśli ktoś zaproponuje coś krótszego lub zmuszenie SublimeText do otwierania w osobnych zakładkach, a nie w oknach, będzie to znacznie bardziej aprice.
andilabs
@ andi To jest problem z SublimeText, powinieneś zadać go jako osobny wątek.
Gilles „SO- przestań być zły”
w każdym razie myślę, że chodzi o dokładny format bash, ponieważ jeśli uruchomię na przykład open -a SublimeText admin.py forms.py, otwiera się w jednym oknie z dwiema zakładkami.
andilabs
2

W Mac OS X bash możesz uruchomić coś takiego:

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

Jedną wadą jest to, że otwiera się w nowym oknie Sublime zamiast korzystać z nowej karty.

andilabs
źródło
0

Myślę, że w tym przypadku możesz użyć

find ./ -name \*.foo | xargs gedit
pbm
źródło
1
To nie zadziała, jeśli nazwa pliku zawiera znaki specjalne (białe znaki lub \'"), ponieważ xargswymaga wprowadzenia cudzysłowu w sposób, findktóry nie daje rezultatów. Użyj find … -print0 | xargs -0 …albo użyj prostszego find … -exec … {} +.
Gilles „SO- przestań być zły”
Ponadto, chociaż nie ma to zastosowania w tym przypadku, -print0 | xargs -0problem polega na tym, że stdin został pożarty i nie jest już podłączony do terminala. Problem przy próbie użycia edytora tekstowego.
derobert