替换文件名和目录中的空格和“-”
Replacing both spaces and " - " in filenames and directorys
我一直在读这个 this discussion 和这个 find . -depth -name '* *' \ | while IFS= read -r f ; do mv -i "$f" "$(dirname "$f")/$(basename "$f"|tr ' ' _)" ; done
帮我删除文件和目录中的空格。
Beat Boy
变为 Beat_Boy
。这个可以。
我不明白的是如何处理这个问题:
Beat Boy - Best of
变成 Beat_Boy_-_Best_of
而我希望它变成 Beat_Boy-Best_of
.
如果有任何提示,我将不胜感激...
此致
您可以添加 sed
以将“_-_”替换为“-”
f="Beat Boy - Best of"
echo $f | tr ' ' _ | sed 's/_-_/-/g'
#Beat_Boy-Best_of
在你的情况下,你会想要:
find . -depth -name '* *' |
while IFS= read -r f ; do
mv -i "$f" "$(dirname "$f")/$(basename "$f" |
tr ' ' _ |
sed 's/_-_/-/g')" ;
done
编辑
您也可以将 tr ' ' _ | sed 's/_-_/-/g'
替换为 sed 's/ /_/g ; s/_-_/-/g'
。
f="Beat Boy - Best of"
f1=${f// - /-}
f1=${f1// /_}
echo $f1
Beat_Boy-Best_of
此解决方案只是将任意数量的 [ ' ' 或 '-' ] 替换为单个 '_'。我想这可能就是您想要的。
find
命令仍然只搜索其中包含空格的文件,但您可以更改它以满足您的需要。
while IFS= read -r f ;
mv -i "$f" "$(dirname "$f")/$(basename "$f" | sed -re 's/[ -]+/_/g')";
done < <(find . -depth -name '* *')
满分:这采用了 LC-datascientist 的解决方案并替换了 tr
和 sed
的有些笨拙的组合。甚至 Doyousketch2 关于 sed 的评论也没有使用 s///g 选项来简化它。
我一直在读这个 this discussion 和这个 find . -depth -name '* *' \ | while IFS= read -r f ; do mv -i "$f" "$(dirname "$f")/$(basename "$f"|tr ' ' _)" ; done
帮我删除文件和目录中的空格。
Beat Boy
变为 Beat_Boy
。这个可以。
我不明白的是如何处理这个问题:
Beat Boy - Best of
变成 Beat_Boy_-_Best_of
而我希望它变成 Beat_Boy-Best_of
.
如果有任何提示,我将不胜感激...
此致
您可以添加 sed
以将“_-_”替换为“-”
f="Beat Boy - Best of"
echo $f | tr ' ' _ | sed 's/_-_/-/g'
#Beat_Boy-Best_of
在你的情况下,你会想要:
find . -depth -name '* *' |
while IFS= read -r f ; do
mv -i "$f" "$(dirname "$f")/$(basename "$f" |
tr ' ' _ |
sed 's/_-_/-/g')" ;
done
编辑
您也可以将 tr ' ' _ | sed 's/_-_/-/g'
替换为 sed 's/ /_/g ; s/_-_/-/g'
。
f="Beat Boy - Best of"
f1=${f// - /-}
f1=${f1// /_}
echo $f1
Beat_Boy-Best_of
此解决方案只是将任意数量的 [ ' ' 或 '-' ] 替换为单个 '_'。我想这可能就是您想要的。
find
命令仍然只搜索其中包含空格的文件,但您可以更改它以满足您的需要。
while IFS= read -r f ;
mv -i "$f" "$(dirname "$f")/$(basename "$f" | sed -re 's/[ -]+/_/g')";
done < <(find . -depth -name '* *')
满分:这采用了 LC-datascientist 的解决方案并替换了 tr
和 sed
的有些笨拙的组合。甚至 Doyousketch2 关于 sed 的评论也没有使用 s///g 选项来简化它。