如何在目录中的所有文件和该目录下的子目录(以及这些子目录下的所有子目录等)中将“Full Tilt”短语替换为“FullTilt”?
答案 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)
您只需使用find
和sed
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