【问题标题】:Bash script that will execute a program over all files in a directory将在目录中的所有文件上执行程序的 Bash 脚本
【发布时间】:2014-04-24 03:46:02
【问题描述】:

编写一个 bash 脚本,该脚本将在“allfiles”目录中的所有文件上执行“main”程序。 Main 是一个可执行文件。然后将结果定向到文件“output.dat”。

每当我运行 bash 脚本时,我都会收到错误“./main: no such file or directory”。 bash 脚本、main 和“allfiles”目录都在“/home/directory/”中。我不确定为什么会出现此错误,或者我是否正确编写了 bash 脚本。任何帮助是极大的赞赏。

#!/bin/bash
for file in /home/directory/allfiles/*
do
   ./main $file >> output.dat
done

编辑:应该澄清'main'是从makefile生成的可执行文件

【问题讨论】:

  • 如果main写入正确,应该可以直接运行./main /home/directory/allfiles/*的所有文件。

标签: linux bash shell


【解决方案1】:

如果您在运行脚本时不在/home/directory,那么它将无法找到main。试试

#!/bin/bash
for file in /home/directory/allfiles/*
do
   /home/directory/main $file >> output.dat
done

此外,如果 main 不可执行,您必须让 bash 手动调用它。为此使用bash /home/directory/main $file,或使用chmod +x main 使main 可执行。

【讨论】:

  • 对不起,我应该说得更清楚,我在运行脚本时在 /home/directory/ 中
  • 针对其他可能的问题更新了答案
  • 再次抱歉最初没有说明这一点,main 是从 makefile 生成的可执行文件
  • 如果 main 在你运行脚本时所在的目录中,并且它是可执行的(ls -l 将检查这个),并且如果你的脚本没有更改目录,那么它将执行,没有“./main:没有这样的文件或目录”消息。你能仔细检查所有这些位吗?
【解决方案2】:

在这种使用情况下,我更喜欢使用 find。您可以使用子目录进行管理;)

#!/bin/bash
main=./main
basedir=/home/directory/allfiles/
outFile=output.dat

for file in $(find $basedir -type f)
do
    $main $file >> $outFile
done

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 1970-01-01
    • 2010-12-29
    • 2023-03-04
    • 2014-03-07
    相关资源
    最近更新 更多