如何改变文件名的递归情况?

时间:2011-11-27 12:59:34

标签: linux file case

我需要将所有文件的大小写设置为小写:

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命令可以吗?感谢。

3 个答案:

答案 0 :(得分: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 :(得分:1)

你可以这样做:

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

答案 2 :(得分: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
)

希望这有帮助!