Как открыть несколько файлов с выхода `find`?

10

Я знаю, что могу открыть несколько файлов, найденных в директории, вот так:

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

Это работает, но при попытке открыть несколько текстовых файлов в gedit одновременно, он открывает их последовательно (когда один файл закрыт, следующий открывается).

Я хотел бы открыть все эти файлы одновременно. Как мне этого добиться?

jottr
источник

Ответы:

15

Чтобы работать с несколькими файлами одновременно find, используйте +вместо \;:

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

С zsh или с bash ≥4, если вы вставите shopt -s globstarсвой ~/.bashrc, вы можете использовать **/для перехода в подкаталоги:

gedit **/*.foo

У Zsh также есть много глобальных классификаторов, которые могут заменить большинство применений find.

Жиль "ТАК - перестань быть злым"
источник
Может кто-нибудь предложить, как запустить его на Mac OS X?
Andilabs
@andi решил сам. Но если кто-то предложит что-то более короткое или заставит SublimeText открываться в отдельных вкладках, а не в окнах, это будет сильно сокращено.
Andilabs
@andi Это проблема SublimeText, вы должны задать ее как отдельную ветку.
Жиль "ТАК ... перестать быть злым"
во всяком случае, я думаю, что речь идет о точном формате Bash, потому что, если я, например, запустить, open -a SublimeText admin.py forms.pyон открывается в одном окне с двумя вкладками.
Andilabs
2

В Mac OS X bash вы можете запустить что-то вроде:

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

Недостатком является то, что он открывается в новом окне Sublime вместо использования новой вкладки.

andilabs
источник
0

Я думаю, что в этом случае вы могли бы использовать

find ./ -name \*.foo | xargs gedit
постоянный репер
источник
1
Это не будет работать, если имя файла содержит специальные символы (пробел или \'"), потому что xargsтребует , чтобы его ввод был заключен в кавычки способом, findкоторый не производит. Либо используйте find … -print0 | xargs -0 …, либо используйте более простое find … -exec … {} +.
Жиль "ТАК - перестань быть злым"
Кроме того, хотя это не относится к этому случаю, -print0 | xargs -0проблема заключается в том, что stdin сожран и больше не подключен к терминалу. Проблема, если вы пытаетесь использовать редактор текстового режима.
Дероберт