Shell-Script

需要腳本來重命名文件用單空格替換雙空格

  • June 4, 2020

有人可以幫我弄清楚如何從目錄名稱中刪除雙空格嗎?

我正在使用一項服務,它為我提供了名稱包含空格的文件的目錄結構。有時目錄名稱包含雙空格,我的一些自製腳本無法處理它。

我想要一個 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命令時,雙倍空格已經轉換為單空格。

而不是xargsand mv,我更喜歡rename工具:

根據您擁有的重命名工具:

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

或者

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

-n(如果您對輸出感到滿意,請刪除選項(試執行)以實際執行重命名)


或者,如果您想堅持使用mvxargs不需要,find -exec可以):

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

引用自:https://unix.stackexchange.com/questions/590805