如何从`find`输出打开多个文件?


10

我知道我可以打开目录中的多个文件,如下所示:

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

这种方法有效,但是当尝试同时在gedit中打开一堆文本文件时,它会依次打开它们(关闭一个文件时,将打开下一个文件)。

我想同时打开所有这些文件。我该如何实现?

Answers:


15

find使用一次处理多个文件,请使用+代替\;

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

如果使用zsh或bash≥4(如果您shopt -s globstar输入)~/.bashrc,则可以**/用来递归到子目录:

gedit **/*.foo

Zsh还具有许多glob限定符,可以代替的大多数用法find


有人可以建议如何在Mac OS X上运行它吗?
andilabs

@andi自己解决了。但是,如果有人提议更短一些,或者强迫SublimeText在单独的选项卡中而不是在窗口中打开,那将是无价之宝。
andilabs

@andi这是SublimeText的问题,您应该将其作为单独的线程进行询问。
吉尔(Gilles)'所以

无论如何,我认为它与精确的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 … {} +
吉尔斯(Gilles)“所以,别再邪恶了”,2010年

另外,尽管在这种情况下不适用,但-print0 | xargs -0存在以下问题:stdin已被吞噬,并且不再连接到终端。如果您尝试使用文本模式编辑器,则会出现问题。
derobert
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.