2012-09-14 48 views
1

文件夾我有一個文件夾結構的目錄如下:Unix的CLI腳本重命名容納空間

DATA -- ABD 1231345 -- 2012_01_08 
        -- 2012_03_09 
        -- 2012_06_11 

    -- DEF 4859480 -- 2012_02_10 
        -- 2012_05_10 
        -- 2012_07_10 

我試圖做的是:

  • cd DATA
  • 運行一個bash腳本(而在/DATA),將重命名所有第一個孩子文件夾從

ABD 1231345

ABD_1231345

你有關於如何使用在Mac OSX/UNIX命令行來完成的建議?

回答

2
for i in *; do mv "$i" "${i// /_}"; done 

注意,${i//string/repl}語法是SH的非標準擴展,但你可以像做同樣的事情便攜:

for i in *; do j=$(echo "$i" | tr ' ' _); mv "$i" "$j"; done 
+0

william將遞歸地在文件夾結構中更深入?我只是注意到這是必要的 – pepe

+0

這不會遞歸。可能最好的做法是做一些事情,比如「查找」。 -exec rename_file {} \;'其中rename_file是一個簡單的腳本(或者,如果你的shell支持導出函數,它會識別出一個函數)來重命名文件。 –

+0

你的腳本可以替換'rename_file'嗎? – pepe

0

當前目錄包含:

aa 111 
bb 222 
aaa.txt 
aaa 1111.txt 
bbb 2222.txt 

輸出:

aa_111 
bb_222 
aaa.txt 
aaa 1111.txt 
bbb 2222.txt 

代碼:

ls -ltr|awk -F" " '{print $9,$10}'|sed 's/ $//g'|grep -v "^$">abc 

while read line 
do 
val=`echo $line` 
echo $line|grep " ">/dev/null 
rc=$? 
if [[ -d "$val" && $rc -eq 0 ]] 
then 
replace=`echo $line|sed 's/ /_/g'` 
mv "$val" "$replace" 
fi 
done<abc 

rm -f abc 

在此,上述腳本重命名僅在當前directory.You的文件夾可以跳過grep的部分(其爲效率)。