我有一个这样的目录:
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等等。)
答案 0 :(得分:3)
有几种可能的选择。这些答案基于您的情况,您知道kate可以打开所有文件,并且您想要打开任何扩展名的文件。
find dir -type f -exec kate {} +
kate $(find dir -type f)
kate `find dir -type f`
第二种和第三种形式几乎相同。主要区别[1]是第一个版本将处理名称中带有空格的文件,而第二个和第三个版本不会。
[1]感谢您指出NVRAM,我没有意识到我第一次发布答案时。
答案 1 :(得分: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`
答案 2 :(得分:2)
kate $(find dir -type f)
答案 3 :(得分:0)
您对xargs
不是很熟悉,或者您没有正确使用它,因为您正在尝试做的是正是问题 xargs旨在解决:给定一个任意长的字符串列表,在尽可能少的执行中将它们作为参数传递给程序,同时不超过程序可以采用的参数数量的系统限制。
你适合find ... -exec
,但也可以修复。只需在+
命令的末尾添加find
即可,它的行为类似于xargs
。
上面使用kate $(...)
(或带有反引号的等价物)的解决方案一般都不起作用(它们不支持带空格的文件名,如果文件列表很长则根本不会运行) 。 find ... +
和xargs
都可以解决这些限制。