我仍然是bash
的新手,我正尝试创建一个bash
脚本来抄录我拥有的所有视频和音频文件。任何文件扩展名。
到目前为止,我可以从运行bash
脚本的同一文件夹中转录所有视频文件。
例如。下面的命令允许我转录bash脚本所在的同一文件夹中的所有视频文件。
for file in *
do
autosub -S de -D de "$file" >> results.out
done
我试图递归地执行相同的命令,因此不必每次都在每个文件夹上执行该命令。
for file in \*
do
autosub -S de -D de "$file" >> results.out
done
因此,我对上面的命令做了一些更改,但仍然无法正常工作。它尝试递归地将命令应用于folders
而不是files
。仅当命令与bash脚本位于同一文件夹中时,才会将命令应用于文件。
我想要实现的是:
对每个文件(任何扩展名。)使用autosub -S de -D de $file
运行命令。如果无法转录,它将自动跳过。您不必在bash脚本中编写该命令,因为autosub
已经跳过了)
我想在这样的文件夹结构中转录所有视频文件:
Folder 1
------SubFolder 2
----------------SubFolder 3\video.avi
Folder 2\video.mp4
Folder 1
--------SubFolder\video.mkv
答案 0 :(得分:4)
通常,人们会为此使用find
:
find . -type f -execdir autosub -S de -D de {} \; >> results.out
这将对当前目录(注意-type f
)下的每个文件(注意:.
)执行命令。每次在文件所在目录内执行该命令(注意:-execdir
)。这意味着您的命令将接收诸如./video.avi
,./video.mp4
之类的文件名,而不是相对于初始目录的完整路径。这被认为比-exec
更安全。所有结果都将附加到一个文件,./results.out
。
或者,如果您使用的是bash >= 4.0
,则可以通过以下方式启用globstar
:
shopt -s globstar
,然后使用**
进行递归扩展:
for file in **
do
autosub -S de -D de "$file" >> results.out
done