如何重命名目录和所有子目录中的文件

时间:2013-09-13 15:43:44

标签: unix

如何在目录中的所有文件和该目录下的子目录(以及这些子目录下的所有子目录等)中将“Full Tilt”短语替换为“FullTilt”?

4 个答案:

答案 0 :(得分:1)

没有测试过,但你应该能够或多或少地做到这一点:

首先,创建一个名为'rename.sh'的脚本,使其可执行并使用以下内容保存:

#! /bin/bash
folder=`dirname $1`
oldname=`basename $1`
newname=`echo "$oldname" | sed 's/Full Tilt/FullTilt/g'`
mv "$folder/$oldname" "$folder/$newname"

然后,从目录中运行以下命令:

find -name "*Full Tilt*" -type file -exec "rename.sh" "{}" ";"

它可能可以在find上使用一行代码(而不是使用脚本),但它不可读,并且它将包含太多的转义以便跟随......

答案 1 :(得分:0)

类似的东西:

find . -name '*xx*' -print | sed -e 's/^\(.*\)xx\(.*\)$/\1xx\2 \1yy\2 /g' | xargs -n2 mv

其中' xx '是文件名的搜索字符串。 sed用yy替换xx,并将管道替换为xargs xargs现在接受(-n2)两个参数(旧名称和新名称)并使用两个参数执行mv。

这只是一个起点,在安全的环境中尝试: - )

在重命名路径(-type = d)之后,首先重命名文件(-type = f)。如果更改此顺序,则在更改下一个文件名时重命名目录时mv将失败: - )

如果文件名中有空格,则必须使用print0而不是print。但是你还必须改变sed部分...我认为剩下的就是你的作业: - )

随意询问是否有什么东西不起作用。

答案 2 :(得分:0)

您只需使用findsed

执行此操作即可
 find /path/to/your/dir -type f -exec sed -i 's/Full Tilt/FullTilt/g' "{}" \;

答案 3 :(得分:0)

男孩,这很棘手!首先,您必须将find的输出反转为从最深的文件和目录开始。然后使其适用于包含空格的文件名。然后,并非所有rename命令都是相同的。你需要Larry Wall中的一个,它采用Perl正则表达式来定义重命名。首先检查man rename

find foo | tac | while read i; do echo $i; rename 's/(.*)Full Tilt/$1FullTilt/' "$i"; done