需要脚本重命名文件,用单空格替换双空格

需要脚本重命名文件,用单空格替换双空格

有人可以帮我弄清楚如何从目录名称中删除双空格吗?

我正在使用一项服务,该服务为我提供名称包含空格的文件的目录结构。有时目录名称包含双空格,我的一些自制脚本无法处理它。

我想要一个 shell 命令组合,它将重命名目录并删除双空格。有点像sed 's/ / /g'

幸运的是,没有子目录的父目录也需要重命名。

我可以这样找到候选人

sh> find ~/Downloads/Scala_Intro -name '*  *' -print 
/Users/jimka/Downloads/Scala_Intro/SCALAIN_E-Running Average-362/Edward  Cacioppo_2973_assignsubmission_file_
/Users/jimka/Downloads/Scala_Intro/SCALAIN_E-Implement histogram-3169/Edward  Cacioppo_3102_assignsubmission_file_

但是当我尝试使用xargs操作这个行序列时,xargs替换似乎删除了双空格。因此我无法生成命令行mv old-name new-name

sh> find ~/Downloads/Scala_Intro -name '*  *' -print | xargs -I % echo %
/Users/jimka/Downloads/Scala_Intro/SCALAIN_E-Running Average-362/Edward Cacioppo_2973_assignsubmission_file_
/Users/jimka/Downloads/Scala_Intro/SCALAIN_E-Implement histogram-3169/Edward Cacioppo_3102_assignsubmission_file_

我正在尝试类似以下的方法,但它不起作用。

sh> find ~/Downloads/Scala_Intro -name '*  *' -print | xargs -p -I % mv  "%" `echo "%" | sed 's/  / /g'`
mv /Users/jimka/Downloads/Scala_Intro/SCALAIN_E-Running Average-362/Edward Cacioppo_2973_assignsubmission_file_ /Users/jimka/Downloads/Scala_Intro/SCALAIN_E-Running Average-362/Edward Cacioppo_2973_assignsubmission_file_?...

请注意,当 xargs 询问是否执行该mv命令时,双倍空格已经转换为单倍空格。

答案1

而不是xargsmv,我更喜欢rename工具:

取决于您拥有的重命名工具:

find ~/Downloads/Scala_Intro -name '*  *' -exec rename -n '  ' ' ' {} +

或者

find ~/Downloads/Scala_Intro -name '*  *' -exec rename -n 's/  / /' {} +

-n如果您对输出满意,请删除选项(空运行)以实际执行重命名)


或者如果你想坚持使用mv(不需要xargsfind -exec可以):

find ~/Downloads/Scala_Intro -name '*  *' -exec sh -c 'mv "$1" "${1//  / }"' find-sh {} \;

相关内容