我有这样一个目录:

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的,等..)

有帮助吗?

解决方案

尝试

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`

其他提示

有此几种可能的选择。这些答案都是基于你的场景,你知道所有的文件可以通过凯特打开,并且要与任何扩展打开的文件。

find dir -type f -exec kate {} +  

kate $(find dir -type f)

kate `find dir -type f`

第二和第三形式是几乎等同。主要的区别[1]是第一个版本将处理文件与其名称的空白,而第二个和第三个则没有。

[1]感谢指出这NVRAM,没当我先贴答案实现。

kate $(find dir -type f)

你要么不是很熟悉xargs,或者你没有正确地使用它,因为你正在试图做的是什么的正是问题的xargs的旨在解决:给定一个任意串的一长串,它们作为参数传递给一个程序在尽可能少处决,同时尽可能不超过上的程序可以采取的参数的数目的系统限制。

您是正确的find ... -exec,但也可以固定。只是在+命令瞧的末尾添加find,它的行为就像xargs

以上是使用kate $(...)(或反引号中的等价物)的解决方案中没有在一般工作(他们不支持带空格的文件名,将不会运行在所有如果文件列表很长)。无论find ... +xargs绕过这些限制。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top