自动应答命令 - 在应答之间执行 cp 操作

自动应答命令 - 在应答之间执行 cp 操作

我的想法是,我想执行一个命令,然后它要求输入要处理的文件名,处理完成后,它输出一个名为 的图像prediction.png,它要求下一个文件名,依此类推。我有数千个文件,因此无法一一手动输入。但是,我有一个包含所有文件名的 .txt 文件。

所以我想写一个bash脚本:

1-执行命令

2-当它询问文件名时,它会从txt文件中读取第一行

3-程序将处理该文件,输出图像,然后将该图像复制到另一个目录(以避免覆盖下一个文件)

4-然后要求下一个,做同样的事情,依此类推

直到程序请求一个文件,并且 .txt 文件已经完成,然后它自动终止

到目前为止我能做的就是一一读取文件,并在程序要求使用时将它们作为答案传递给我的程序

cat filenames.txt | ./program.sh

问题是我想cp在处理新文件之前输出

答案1

我认为您不能在program.sh仅运行一次时执行此操作,因为它将继续创建文件,并且您永远无法确定文件何时完成。

相反,为 filenames.txt 的每一行运行该程序一次:

while IFS= read -r FILE; do # loop through files in filenames.txt
  echo "$FILE" | ./program.sh # run program once and end it with newline
  mv created_filename /some/other/location/${FILE}.ext; # move file
done < filenames.txt
  • 使用mv而不是cp,如果您移动到相同的文件系统,速度会更快。
  • 更改.ext输出格式(例如.png)。

答案2

你可以这样做:

(
while IFS= read -r FILE; do
    echo "$FILE"
    sleep 1 # or somehow make a trigger to see when the file is ready ...
    mv output_file /somewhere/else
done < filenames.txt;
) | ./program.sh

通过


使用 xargs 相同:

(
xargs -a filenames.txt -I{} sh -c 'echo {}; sleep 1; mv file /somewhere/else'
) | ./program.sh

相关内容