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


10

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

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

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

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

Ответы:


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 вместо использования новой вкладки.


0

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

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

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

Кроме того, хотя это не относится к этому случаю, -print0 | xargs -0проблема заключается в том, что stdin сожран и больше не подключен к терминалу. Проблема, если вы пытаетесь использовать редактор текстового режима.
Дероберт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.