bash脚本列出路径中带有转义字符的所有目录,并将CD放入每个目录以执行操作



我正试图编写一个脚本来列出路径中的所有目录。转到每个目录,并将每个目录中的.srt文件重命名为同一子目录中的.mp4文件(更少扩展名)。每个子目录有一个。mp4和一个。srt文件。

返回$ ./change.sh ./change.sh: line 2: Lawless: command not found here . Lawless(1111)是目录列表中第一个目录的名称。

代码
#!/bin/bash
yourPathEscaped=$(`find $1 -mindepth 1 -maxdepth 1 -type d | cut -d . -f2 | cut -d / -f2 | sed 's/ /\ /g' | sed 's/,/\, /g' | sed -e s/'/\\'/g`)
for dirm in $yourPathEscaped
do
cd $dirm
echo $dirm
for f in `ls *.mp4 | grep -Po '.*(?=.)'`; do echo $f; mv *.srt $f.srt; ls ; done
for f in `ls *.mkv | grep -Po '.*(?=.)'`; do echo $f; mv *.srt $f.srt; ls ; done
cd ..
done

假设每个目录只有一个.srt文件,这可能符合您的要求。while+read循环及工艺替代

#!/usr/bin/env bash
while IFS= read -rd '' files; do
directory=${files%/*}
(
cd "$directory" || exit
shopt -s nullglob
for f in *.mp4 *.mkv; do
printf '%sn' "$f"
file_name=${f%.*}
echo mv -v -- *.srt "${file_name}.srt"
done
)
done < <(
find "$1" -mindepth 1 -maxdepth 1 -type f ( -name '*.mp4' -o -name '*.mkv' ) -print0
)

  • 这可能是没有cd虽然,但这是我想到的,根据你的脚本。

  • 如果您对输出满意,请删除echo,以便mv实际上可以重命名/移动文件。

  • 如何逐行或逐字段读取文件或流

  • 如何找到并安全地处理包含换行符,空格或两者的文件名?

相关内容

最新更新