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

时间:2016-03-21 06:36:03

标签: c command-line

我有将近30,000个.pdb文件作为输入传递给C程序(linux envi)并获得所需的输出。由于某些机密性问题,我无法共享该程序。请允许任何人提供一些建议,如何通过一次提供所有文件来获得输出。

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

./ file_name x.pdb

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

2 个答案:

答案 0 :(得分:0)

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

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

我的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

因此,如果文件名长度为30,000 pdb文件(您需要考虑空格)的累积总和可以在您的系统命令行长度限制中得到满足,那么您最好使用上述解决方案。

否则,如果您可以灵活地将每个文件独立传递给二进制文件,那么您可以编写一个单独的脚本,您可以在每个文件中为每个文件调用二进制文件。

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

答案 1 :(得分:-1)

XARGS应该可以解决您的问题。 按照以下步骤:

  1. 转到存在.pdb文件的目录
  2. 在终端上运行以下命令。

    find . -name "*.pdb" | xargs ./a.out
    

    如果上述命令失败,则表示文件名的输出大小大于xargs可以接受的大小。

  3. 您可以使用以下awk:

    find . -name "*.pdb" | awk -F"/" '{system ("./a.out " $2)}'
    

    其中./a.out可以替换为C可执行文件的完整路径。

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

    欢呼声