C 如何在命令行中输入多个文件

C 如何在命令行中输入多个文件,c,command-line,C,Command Line,我有近30000个.pdb文件,这些文件将作为输入传递给C程序Linux envi并获得所需的输出。由于一些保密问题,我无法共享该程序。请任何人就如何一次提供所有文件来获得输出给出一些建议 注: 我可以通过提供单个文件来执行,即 /文件名x.pdb 由于输入文件有数千个,因此无法单独运行每个文件。XARGS应该能够解决您的问题。 请遵循以下步骤: 转到存在.pdb文件的目录 在终端上运行下面的命令 find . -name "*.pdb" | xargs ./a.out 若上述命令失败,则表示

我有近30000个.pdb文件,这些文件将作为输入传递给C程序Linux envi并获得所需的输出。由于一些保密问题,我无法共享该程序。请任何人就如何一次提供所有文件来获得输出给出一些建议

注: 我可以通过提供单个文件来执行,即

/文件名x.pdb

由于输入文件有数千个,因此无法单独运行每个文件。

XARGS应该能够解决您的问题。 请遵循以下步骤:

转到存在.pdb文件的目录 在终端上运行下面的命令

find . -name "*.pdb" | xargs ./a.out
若上述命令失败,则表示文件名的输出大小大于xargs可以接受的大小

您可以按如下方式使用awk:

find . -name "*.pdb" | awk -F"/" '{system ("./a.out " $2)}'
其中./a.out可以替换为C可执行文件的完整路径

它将在单个命令中逐个处理所有pdb文件


干杯

@M Ohem是对的。您可以使用:./filename*.pdb

但您需要记住,命令行长度限制因系统而异。它可以检查为:xargs-显示限制

我的Ubuntu 14.04上的输出

xargs --show-limits
Your environment variables take up 3140 bytes
POSIX upper limit on argument length (this system): 2091964
POSIX smallest allowable upper limit on argument length (all systems): 4096
Maximum length of command we could actually use: 2088824
Size of command buffer we are actually using: 131072

这样,如果文件名长度为30000个PDB文件的累积和,你需要考虑在你的系统命令行长度限制中可以容纳空格,那么你可以很好地使用上述的解决方案。 否则,如果您可以灵活地将每个文件独立地传递给二进制文件,那么您可以编写一个单独的脚本,每次都可以为每个文件调用二进制文件

for file in `ls -1 *.pdb`
do
    ./filename $file
done

./filename*.pdb?或者对于'ls-1*.pdb'中的a;do./filename$a;完成了吗?也许你可以生成一个列表,将所有文件处理成一个文本文件,然后将此单个文件的路径作为程序的单个参数。您可以编写一个代码,读取所有文件的文件夹,并将其中的每个文件发送到C程序。是什么阻止您在单个文件中列出所有文件名并传递后者。然后在side program内部打开它,逐行读取名称?这样做的方法肯定有很多种,因此我认为VTC太宽了..ls*.pdb可能会因一定数量的文件、扩展结果的大小而失败。@alk我不明白你的意思。尝试一下,创建大约30000个文件,然后执行ls*。我记得在一个环境中,通过shell扩展甚至无法命名10000个文件名*。命令行的大小也受到限制。所有这些限制都存在,并且取决于正在使用的shell及其配置。@HuntM…我使用了xargs,但它仍然只使用第一个pdb文件。我必须首先编译它,所以我已经使用gcc程序_name.c-o somename完成了编译,然后执行上面提到的命令u@Laxmi您可以尝试使用修改后的命令吗?如果它不起作用,您的文件名超过Xargs的最大命令行字符数,您必须为其编写脚本。