2014-10-26 92 views
0

我正在嘗試將所有文​​件夾名稱從大寫更改爲lowercase。不幸的是我不能做到這一點。我知道如何改變文件夾名稱,但我的管道和腳本不起作用。更改文件夾名稱的腳本不起作用

我使這個腳本工作。

#!/bin/bash 
for i in *; 
do mv "$i" echo $i | awk '{print tolower($0)}' 
done 

我知道,當我做mv "$i" "Z$i"它會把Z在其他文件夾名稱的前面。

+0

您需要改變大小寫的代碼反引號。 – Yetti99 2014-10-26 16:16:22

+0

反引號?你可以示例 – user3402584 2014-10-26 16:17:22

回答

1

而不是

mv "$i" echo $i | awk '{print tolower($0)}' 

嘗試:

mv "$i" `echo $i | awk '{print tolower($0)}'` 

mv "$i" $(echo $i | awk '{print tolower($0)}') 
+0

你不應該使用陳舊過時的背景,使用這樣的括號:'mv「$ i」$(echo $ i | awk'{print tolower($ 0)}')''。你也可以在這裏使用document來從這樣的變量中獲取數據到'awk'中:'mv「$ i」$(awk'{print tolower($ 0)}'<<< $ i)' – Jotne 2014-10-26 21:46:03

1

使用某些命令替代技術

#!/bin/bash 
for i in *; 
do 
mv "$i" $(echo $i | awk '{print tolower($0)}') 
done 

#!/bin/bash 
for i in *; 
do 
mv "$i" `echo $i | awk '{print tolower($0)}'` 
done 

你也可以使用翻譯,tr執行相同的功能。

#!/bin/bash 
for i in *; 
do 
mv "$i" `echo $i | tr A-Z a-z'` 
done 

tr翻譯與在第二列表中相應元素的第一列表的每個元素。

1

我認爲使用任何外部工具的這個有點矯枉過正。在新的你可以使用這樣的事情:

for i in *; do mv "$i" "${i,,?}"; done 

我也建議使用-i選項詢問交互如果目標文件存在移動。

相關問題