1

我有一个这样的目录:

dir
dir/somefile.txt
dir/subdir/subsub/somefile2.txt
dir/subdir2/somefile.txt

我想在一个命令的单个实例中打开所有子目录中的所有文件。我尝试使用 -exec 或 xargs 进行查找,但它们使用单​​独的命令实例打开每个文件。

基本上,我想要的东西最终像 kate dir/somefile.txt dir/subdir/subsub/somefile2.txt dir/subdir2/somefile.txt, 但对于任意数量的子目录中的任意数量的文件。我正在使用 bash,但任何脚本建议都可以。

澄清:我不仅仅指 .txt 文件,而是任何 ascii 文件(即 .php、.txt、.html 等)

4

4 回答 4

3

有几种可能的选择。这些答案基于您的场景,您知道所有文件都可以由 kate 打开,并且您想要打开具有任何扩展名的文件。

find dir -type f -exec kate {} +  

kate $(find dir -type f)

kate `find dir -type f`

第二种和第三种形式几乎是等价的。主要区别 [1] 是第一个版本将处理名称中带有空格的文件,而第二个和第三个版本则不会。

[1] 感谢您指出 NVRAM,当我第一次发布答案时我没有意识到。

于 2009-12-02T23:06:54.083 回答
3

尝试

kate `find . -name \*.txt -type f`

-type f阻止您访问目录的地方。

这是一个使用ls -1代替的示例kate

edd@ron:~/src/debian/R$ ls -1 `find . -type f -name \*.txt`
./R-2.10.0/src/extra/graphapp/readme.txt
./R-2.10.0/src/extra/xdr/copyrght.txt
./R-2.10.0/src/extra/xdr/README.txt
./R-2.10.0/src/gnuwin32/fixed/etc/rgb.txt
./R-2.10.0/src/gnuwin32/installer/CustomMsg.txt
./R-2.10.0/src/library/grid/inst/doc/changes.txt
./R-2.10.0/src/unix/system.txt
./R-2.9.2-ra-1.2.8/src/extra/graphapp/readme.txt
./R-2.9.2-ra-1.2.8/src/extra/xdr/copyrght.txt
./R-2.9.2-ra-1.2.8/src/extra/xdr/README.txt
./R-2.9.2-ra-1.2.8/src/gnuwin32/fixed/etc/rgb.txt
./R-2.9.2-ra-1.2.8/src/gnuwin32/installer/CustomMsg.txt
./R-2.9.2-ra-1.2.8/src/library/grid/inst/doc/changes.txt
./R-2.9.2-ra-1.2.8/src/unix/system.txt
edd@ron:~/src/debian/R$

如果您真的想要子目录中的所有文件,则调用简化为

kate `find . -type f`

如果你在dir/,否则

kate `find dir -type f`
于 2009-12-02T23:07:37.903 回答
2

kate $(find dir -type f)

于 2009-12-02T23:06:07.777 回答
0

你要么不是很熟悉xargs,要么没有正确使用它,因为你要做的正是xargs 旨在解决的问题:给定一个任意长的字符串列表,将它们作为参数传递给在不超过系统对程序可以采用的参数数量的限制的情况下,尽可能少地执行程序。

你是对的find ... -exec,但这也可以解决。只需在命令+末尾添加find,瞧,它的行为就像xargs.

上述使用的解决方案kate $(...)(或具有反引号的等效解决方案)通常都不起作用(它们不支持带空格的文件名,如果文件列表很长,则根本不会运行)。两者都find ... +可以xargs绕过这些限制。

于 2009-12-03T04:41:49.790 回答