我正试图编写一个脚本来列出路径中的所有目录。转到每个目录,并将每个目录中的.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
实际上可以重命名/移动文件。如何逐行或逐字段读取文件或流
如何找到并安全地处理包含换行符,空格或两者的文件名?