2011-07-25 83 views
1

我有一個文件夾集合,我想用空格替換文件夾名稱中的所有下劃線。Unix批量重命名文件夾(下劃線到空格)

任何想法?

感謝

+1

確定嗎?文件名中的空格可能會導致一些麻煩。 Unix支持它們 - 並不是所有爲Unix編寫的工具都可以。 –

+0

對閉幕者來說:這是一個合適的問題 - 它要求如何編寫一個shell腳本(一個程序)來完成特定的任務。如果你把它作爲另一個問題的副本來結束,你會從我那裏得到更多的同情。 –

+0

我實際上在Google上發現了這一點,尋找相反的任務(空格來強調) - 這對我很有用! – VMDX

回答

2

(bash)的這會發現所有的文件夾或當前目錄下的名稱中帶有下劃線並重新命名他們爲你提及:

for d in $(find . -name '*_*' -type d) ; do 
    new=$(echo $d | sed -e 's/_/ /g') 
    mv $d $new 
done 
+0

我用引號括住了$ d和$ new,它的確有竅門。謝謝。 – user860778

0

你可以嘗試像

#> ls -l | grep '^d' | awk '{oldname = $9 ; gsub(/_/, " " ,$9); print "mv " oldname " " $9 }' > temp.script 
#> chmod 744 temp.script 
#> ./temp.script 

當然首先測試:)

0

您的系統是否有rename命令可以滿足您的需求嗎?在某些系統中,它存在並可以使用一些正則表達式來進行更改。我用它使用Perl的正則表達式(Perl腳本,換句話說)版本:

find . -type f -name '*_*' -print0 | xargs -0 rename 's/_+/ /g' 

在另一方面,在Linux標準版本趨於是通過比較而脆弱(不會做什麼你需要)。

請注意,如果您也想重命名目錄,請在重命名任何文件之前或重命名所有文件之後執行這些操作。將它們混淆意味着您的重命名會遇到訪問位於一個目錄中的文件名的問題,但自生成文件名後該目錄已重命名。即使使用-depth作爲find的選項也不保證是安全的。