for循环查找如何递归目录和空格

for循环查找如何递归目录和空格

我正在尝试编写一个脚本来检查视频文件编解码器(使用 ffprobe),并对其进行相应的编码(使用 HandBrakeCLI)。

Directory
mp4
>> Sub-Directory
>> mp4
>> >> Sub-sub Directory
>> >> mp4

脚本中的一个问题是它不能执行递归子目录。我尝试更改

for video_file in $(find . -type f -name '*.mp4')

上面的代码可能是错的,因为我通过阅读 AskUbuntu 并尝试了一些代码来测试它们。不记得是哪个让它工作的,但最终它无法处理文件/目录中的空格。

适用于当前工作目录但不适用于递归目录的脚本:

#!/bin/bash
for video_file in ./*.mp4;
do
## using ffprobe to check video codec
CHECK_FILE=`ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 "$video_file"`
if [ $CHECK_FILE = hevc ]
then
    echo "$video_file is hevc/h265, skipping"
else
    # remove .mp4 extension
    tempname="${video_file%.*}"_tmp.mp4
    newname="${video_file%.*}"_hevc.mp4
    HandBrakeCLI -i "$video_file" -o "$tempname"
    mv -v "$tempname" "$newname"
    echo "Moving on to next available file"
fi
done

如果有人能指引方向我将非常感激:)

答案1

shopt -s globstar在脚本中设置此项,将您的 for 循环更改为;

shopt -s globstar
for video_file in ./**/*.mp4;

要查看可以在 bash 脚本中打开或关闭或设置的内容,请执行以下操作:

shopt

autocd          off
cdable_vars     off
cdspell         off
checkhash       off
checkjobs       off
checkwinsize    on
cmdhist         on
compat31        off
compat32        off
compat40        off
compat41        off
compat42        off
compat43        off
complete_fullquote  on
direxpand       off
dirspell        off
dotglob         off
execfail        off
expand_aliases  on
extdebug        off
extglob         on
extquote        on
failglob        off
force_fignore   on
globasciiranges off
globstar        on
gnu_errfmt      off
histappend      on
histreedit      off
histverify      off
hostcomplete    off
huponexit       off
inherit_errexit off
interactive_comments    on
lastpipe        off
lithist         off
login_shell     off
mailwarn        off
no_empty_cmd_completion off
nocaseglob      off
nocasematch     off
nullglob        off
progcomp        on
promptvars      on
restricted_shell    off
shift_verbose   off
sourcepath      on
xpg_echo        off

相关内容