2014-10-26 99 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选项询问交互如果目标文件存在移动。