我正在尝试编写一个脚本来列出路径中的所有目录。转到每个目录,并将每个目录中的一个.srt文件重命名为同一子目录中的.mp4文件(较少扩展名)。每个子目录都有一个.mp4和一个.srt文件。
作为回报,我得到了这个$ ./change.sh ./change.sh:第2行: Lawless: 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发布于 2021-09-03 02:20:40
假设每个目录只有一个.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 '%s\n' "$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实际上可以重命名/移动文件。https://stackoverflow.com/questions/69038523
复制相似问题