我正在开展一个项目,我需要使用avconv将视频转换为不同的格式。问题是我不希望它们在后台同时运行。所以我有想法让* .txt文件和SH脚本检查第一行(它将是脚本)和"运行"同时删除并删除它,完成后将再次运行第一行并删除它。
我怎么可能那样做?很抱歉,如果它很容易,因为我之前从未使用过Linux SH脚本中的文件阅读。
答案 0 :(得分:1)
如果您只想一个接一个地运行大量avconv
个作业,请将它们放在shell脚本中并按如下方式运行:
#!/bin/bash
avconv <abc> <def>
avconv <ghi> <jkl>
avconv ...
如果您希望在文件开始运行后继续将作业附加到文件中,则需要&#34;作业队列&#34; ,您可以轻松地使用{{1 }}
基本上,您使用一堆GNU Parallel
命令创建初始文件,或者只创建一个空文件并使用它。然后启动avconv
处理作业
GNU Parallel
然后当你有一份新工作时,touch jobqueue # make empty list of jobs
tail -n+0 -f jobqueue | parallel -j1 # start GNU Parallel processing them, -j1 means one at a time
就像这个
echo
键入
,查看联机帮助页中的相关部分echo avconv param1 param2 >> jobqueue
答案 1 :(得分:0)
回答关键问题 - 你可以使用tail
命令(也许head
命令也很方便)。另一个问题是你想要实现的全部任务,我认为它比仅仅削减第一线要复杂得多,但祝你好运。
To&#34; edit&#34; - 过滤掉第一行:
tail -n +2 input_file.txt > output_file.txt
然后你可以通过input_file(mv output_file.txt input_file.txt
)
同样,您可以通过以下方式从文本文件中获取第一行:
head -n 1 input_file.txt
答案 2 :(得分:0)
如果您只想对文件的每一行执行某些操作,那么您可以轻松地执行此操作:
while read line; do
echo $line
done < file.txt
这将遍历file.txt
并打印每一行。例如,您可以将每一行用作程序的参数,如下所示:
while read line; do
theprogram $line
done < file.txt
对于每一行,这将使用theprogram
的参数行运行theprogram
。
请注意,使用此方法时,不会修改file.txt
(不会从文件中提取行)。哪个可能是你想要的,也可能不是。