Regex 重命名脚本以调整debian文件名中的某些模式
我现在有点卡住了,试图调整文件夹树中的文件名,如果它们有以下一个或两个:Regex 重命名脚本以调整debian文件名中的某些模式,regex,linux,bash,rename,Regex,Linux,Bash,Rename,我现在有点卡住了,试图调整文件夹树中的文件名,如果它们有以下一个或两个: #!/bin/bash shopt -s globstar start_dir="//srv/MEDIA2/" # double // may be meaningless for name in "$start_dir"/**/*.*; do # search the directory recursively
#!/bin/bash
shopt -s globstar
start_dir="//srv/MEDIA2/" # double // may be meaningless
for name in "$start_dir"/**/*.*; do # search the directory recursively
[[ -f $name ]] || continue # skip if "$name" is not a file
newname=$(sed -E 's/[sS](0[1-9]|[1-9][0-9]) +//; s/\b([0-9]{2})\b/E\1/' <<< "$name")
if [[ "$name" != "$newname" ]]; then # skip if the filenames are the same
echo mv -- "$name" "$newname"
fi
done
s/[sS](0[1-9]|[1-9][0-9])/
我认为可以做到这一点
/\b([0-9]{2})\b/
并以某种方式替换E$1
- [lorem ipsum]dolor sit amet 07[consetetur][1080p].mkv
- [lorem ipsum]dolor sit amet S04 07[consetetur][1080p].mkv
- [lorem ipsum]dolor sit amet S04 E07[consetetur][1080p].mkv
- [lorem ipsum]dolor sit amet E07[consetetur][1080p].mkv
#!/bin/bash
start_dir="//srv/MEDIA2/"
find "$start_dir" -name '*.*' -type f \
|sort \
|while read name; do
((i++))
mv -i "$name" \
#remove season part
"$(printf 's/[sS](0[1-9]|[1-9][0-9])/' "$(dirname "$name")" $((i)) "$(basename "$name")")"
#prepend E to free standing double digits
"$(printf 's/\b([0-9]{2})\b/' "$(dirname "$name")" $((i)) "$(basename "$name")")"
done
现在它回来了
//home/user/./rnscript.sh: line 14: s/[sS](0[1-9]|[1-9][0-9])/: No such file or directory
//home/user/./rnscript.sh: line 16: s([0-9]{2}/: No such file or directory
如果在该领域拥有专业知识的任何人都能帮助我运行此系统,我们将不胜感激。请尝试以下方法:
#!/bin/bash
shopt -s globstar
start_dir="//srv/MEDIA2/" # double // may be meaningless
for name in "$start_dir"/**/*.*; do # search the directory recursively
[[ -f $name ]] || continue # skip if "$name" is not a file
newname=$(sed -E 's/[sS](0[1-9]|[1-9][0-9]) +//; s/\b([0-9]{2})\b/E\1/' <<< "$name")
if [[ "$name" != "$newname" ]]; then # skip if the filenames are the same
echo mv -- "$name" "$newname"
fi
done
区别在于将
+
更改为*
,这意味着零个或更多的空格。增量变量$i
的目的是什么?我最初认为它是为了在重命名后保持运行,直到它以这种方式检查所有文件为止。但现在我意识到这是另一个脚本的遗留,该脚本旨在为名称添加数字计数。啊,鲤鱼,好吧,这比我想象的还要糟糕哦,它确实有用!!!非常感谢你!它会为每个跳过的文件返回这个,但我不介意mv:'//srv/MEDIA2/dateien2//youtube-icon.png'和'//srv/MEDIA2/dateien2//youtube-icon.png'是同一个文件
ok一个问题,似乎无法看到名称中带有空格的子文件夹。这可能吗?感谢您的反馈。您能否详细说明导致问题的路径名?我将一次性修复“同一文件”问题。再次检查,我认为它只检查链接文件夹本身,而不检查子文件夹。我已使用支持S04E02
表达式类型的代码更新了我的答案。