0

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

4

4 回答 4

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 的单行来完成(而不是使用脚本),但它不可读,并且包含太多的转义符......

于 2013-09-13T16:23:48.310 回答
0

您可以简单地使用findsed

 find /path/to/your/dir -type f -exec sed -i 's/Full Tilt/FullTilt/g' "{}" \;
于 2013-09-13T16:15:52.953 回答
0

男孩,是不是很棘手!首先,您必须反转输出find以从最深的文件和目录开始。然后让它与包含空格的文件名一起工作。然后,并非所有rename命令都是平等的。您需要来自 Larry Wall 的那个,它采用 Perl 正则表达式来定义重命名。先检查man rename

find foo | tac | while read i; do echo $i; rename 's/(.*)Full Tilt/$1FullTilt/' "$i"; done
于 2013-09-13T16:45:53.290 回答
0

就像是:

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

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

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

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

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

随意询问是否某些东西根本不起作用。

于 2013-09-13T16:12:55.967 回答