如何追加在当前所有文件和子目录的命令参数?
-
11-09-2019 - |
题
我有这样一个目录:
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
绕过这些限制。