我正在尝试创建一个 bash 脚本,以从某个目录递归地查找并替换所有包含 n.n 的文件名。我的文件名可能包含多个句点,但我只需要更改数字之间的句点。
我想替换这些文件名,因为我错误地创建了很多文件名。当使用破折号而不是句点时,我的媒体播放器可以正确列出文件名。我是这个主题的新手,所以我对脚本的尝试还有很长的路要走。
我已经搜索并找到了几个关于更改文件名的帖子,但没有一个是针对我的需要的,我无法通过反复试验让我的脚本工作!
我要替换的文件名与这些和许多子目录中的文件名非常相似。
1.1.4 Mr. Ben goes home.mp4
01.03 How do I do This.mp4
2.4 Please help.wav**
我想改成:
1-1-4 Mr. Ben goes home.mp4
01-03 How do I do This.mp4
2-4 Please help.wav
我问了一个非常相似的问题并得到了一些提示,但这是在我加入之前,我似乎无法继续这样做。我很抱歉问了两次!
#!/bin/bash
for file in *.*; do
mv "${file}" "${file//\d\.\d,\d\-\d}"
done
read -n 1 -p "Hit any key to exit"; exit
使用
find
和 bash
使用 while
+ read
循环。
类似的东西:
#!/usr/bin/env bash
while IFS= read -rd '' line; do
path_name=$(dirname -- "${line[*]}")
file_name=$(basename -- "${line[*]}")
while [[ -n "$file_name" ]]; do
first="${file_name%% *}"
rest=${file_name#*"$first"}
file_name="${rest# }"
case $first in
*[0-9].[0-9]*)
new_line+=("${first//./-}");;
*)
new_line+=("$first")
esac
done
echo mv -v "$line" "$path_name/${new_line[*]}"
unset new_line
done < <(
find . -type f \( -name '*[0-9].[0-9]*.mp4' -o -name '*[0-9].[0-9]*.wav' \) -print0
)
echo
。