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ąć?

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.


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.


0

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

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.