如何修改Bash脚本的路径变量实现文件读取与输出路径替换
解决方案
修改后的完整脚本
#!/bin/bash echo "Type the category that you want, followed by [ENTER]:" read category # 输入根目录固定为changed_folder INPUT_ROOT="/home/videos_test/changed_folder" # 输出根目录为 ${category}_new OUTPUT_ROOT="/home/videos_test/${category}_new" export STAR="/*" minimumsize=1000 # 遍历输入目录下的所有文件 for file_path in $INPUT_ROOT$STAR$STAR; do [[ ! -f "${file_path}" ]] && continue # 如果不是文件则跳过 actualsize=$(du -k "$file_path" | cut -f 1) if [[ ! $actualsize -ge $minimumsize ]]; then # 如果文件小于1MB则删除 echo $file_path echo size is under $minimumsize kilobytes rm "$file_path" echo deleted else # 大于1MB的文件调用ffmpeg转换 full_file=$(basename "$file_path") # 提取输入文件相对于INPUT_ROOT的相对路径 relative_path="${file_path#$INPUT_ROOT/}" # 拼接得到完整输出路径 output_full_path="${OUTPUT_ROOT}/${relative_path}" # 提前创建输出目录,避免ffmpeg报错 mkdir -p "$(dirname "$output_full_path")" echo "输入文件:$file_path" echo "输出文件:$output_full_path" # 可根据实际需求补充ffmpeg的转码参数,这里已补充输出路径占位 ffmpeg -i "$file_path" "$output_full_path" read -p "Press any key to resume ..." fi done
核心修改说明
- 调整输入路径定义:将原来动态拼接用户输入category作为输入二级目录的逻辑,改为固定读取
/home/videos_test/changed_folder下的内容,匹配你要求的读取路径结构 - 新增输出路径构造逻辑:
- 提取输入文件相对于输入根目录的相对路径,保证子目录结构完全镜像
- 拼接得到以
${category}_new为根目录的完整输出路径 - 调用
mkdir -p提前创建输出目录,避免ffmpeg因路径不存在执行失败
- 补充了变量双引号包裹逻辑,避免文件名带空格时出现执行异常
内容的提问来源于stack exchange,提问作者C0nw0nk
相关产品推荐
相关产品推荐

