2011-11-27 54 views
1

我需要设置的所有文件的情况下,为小写:如何更改文件名递归的大小写?

directory11 
     subdirectory11 
      subdirectory21 
       File1 
       File2 
       ... 
       Filen 
directory21 
     subdirectory21 
      subdirectory21 
       File1 
       File2 
       ... 
       Filen 
.............................................. 


directory11 
     subdirectory11 
      subdirectory21 
       file1 
       file2 
       ... 
       filen 
directory21 
     subdirectory21 
      subdirectory21 
       file1 
       file2 
       ... 
       filen 
.............................................. 

它可能与Linux命令?谢谢。

回答

1

一个许多可能的选项是使用tr改变的情况下。在目录中使用find查找所有文件。使用tr &使用mv重命名创建上部文件名字符串。一些在这些线路上:

while read OLD_FILENAME 
do 
    NEW_FILENAME=`echo "$OLD_FILENAME"|tr [:upper:] [:lower:]` 
    mv -v "$OLD_FILENAME" "$NEW_FILENAME" 
done < <(find directory_name -type f) 

或者,如果你想交互模式mv即要求更换确认使用的东西,在这些线路上:

(
IFS=$'\n' 
for OLD_FILENAME in $(find directory_name -type f) 
do 
    NEW_FILENAME=`echo "$OLD_FILENAME"|tr [:upper:] [:lower:]` 
    mv -vi "$OLD_FILENAME" "$NEW_FILENAME" 
done 
) 

希望这有助于!

1

你应该考虑使用rename(1)命令:

rename 'y/A-Z/a-z/' ** 

**意味着递归如果您正在使用bash4和globstar设置:

shopt -s globstar 

而且,这是rename perl的版本。如果您键入

file $(readlink -f $(type -p rename)) 

你看ELF,你错了,请参阅prename

1

你可以这样做:

 
rename 'y/A-Z/a-z/' *