Regex 用于重命名包含反斜杠的文件名的脚本
我正在尝试编写一个shell脚本来重命名7-zipped文件夹的结果。生成的文件名在文件名中包含反斜杠“”。 我写了一篇简单的文章:Regex 用于重命名包含反斜杠的文件名的脚本,regex,bash,shell,sed,Regex,Bash,Shell,Sed,我正在尝试编写一个shell脚本来重命名7-zipped文件夹的结果。生成的文件名在文件名中包含反斜杠“”。 我写了一篇简单的文章: #! /bin/sh for n in * do OldName=$n NewName=`echo "$n" | tr -s '\' "#" | tr -s " " "_"` echo $NewName mv "$OldName" "$NewName" done 我的问题是\01由echo解释,我的文件是: FLD\01.02.2015 the
#! /bin/sh
for n in * do
OldName=$n
NewName=`echo "$n" | tr -s '\' "#" | tr -s " " "_"`
echo $NewName
mv "$OldName" "$NewName"
done
我的问题是\01由echo解释,我的文件是:
FLD\01.02.2015 thefile.pdf
因此,echo“FLD\01.02.2015 thefile.pdf”返回FLD?.2015
我尝试过各种替代方案,s/\/\\\\/g、sed、tr。
我试着改用printf
我在网上到处搜索,没有找到有效的解决办法
什么都不管用。我需要一个可以在Unix和Mac OS X上运行的解决方案
唯一“有效”的解决办法是
ls > liste.txt
sed -e 's/\\/,/g' liste.txt
然后解析liste.txt,转义反斜杠,生成rename.sh并执行它。但我觉得这真的很肮脏
有人有什么建议吗 如果您关心文字数据,请不要使用
echo
。其结果没有很好的定义
您可以改为使用printf
,也可以使用POSIX,它不会损坏数据
NewName=`printf "%s" "$n" | tr -s '\' "#" | tr -s " " "_"`
您可以这样做(在Bash中),而不是使用
echo
重命名文件名:
例如:
OldName="FLD\01.02.2015 thefile.pdf"
NewName="${OldName//\\/}"
echo "$NewName"
它将打印出:
FLD01.02.2015 thefile.pdf
注意:您需要将shebang更改为
#/bin/bash
使用bash参数扩展。太棒了!我不知道参数扩展${mystring//search/replace}非常感谢!
FLD01.02.2015 thefile.pdf