Shell-Script
需要腳本來重命名文件用單空格替換雙空格
有人可以幫我弄清楚如何從目錄名稱中刪除雙空格嗎?
我正在使用一項服務,它為我提供了名稱包含空格的文件的目錄結構。有時目錄名稱包含雙空格,我的一些自製腳本無法處理它。
我想要一個 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
命令時,雙倍空格已經轉換為單空格。
而不是
xargs
andmv
,我更喜歡rename
工具:根據您擁有的重命名工具:
find ~/Downloads/Scala_Intro -name '* *' -exec rename -n ' ' ' ' {} +
或者
find ~/Downloads/Scala_Intro -name '* *' -exec rename -n 's/ / /' {} +
-n
(如果您對輸出感到滿意,請刪除選項(試執行)以實際執行重命名)或者,如果您想堅持使用
mv
(xargs
不需要,find -exec
可以):find ~/Downloads/Scala_Intro -name '* *' -exec sh -c 'mv "$1" "${1// / }"' find-sh {} \;