linux批量替换文件夹名,文件名,文件内容命令
我要批量替换一个文件夹下所有(文件夹名,文件夹下的文件名,文件内容),包含aa的,把aa替换成bb。...
我要批量替换一个文件夹下所有(文件夹名,文件夹下的文件名,文件内容),包含aa的,把aa替换成bb。
展开
3个回答
2013-04-09
展开全部
1.批量改名采用命令rename
rename 语法:
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
-v表示显示详细信息,-n表示不实际执行替换,只是看哪些文件会受影响。 -f 表示强制,不管是否有重名。
perlexpr是perl语法的表达式, files则是匹配项。因此,该命令执行结果与perlexpr有关,不一定就是改文件名。
实例: 将所有文件名*.html 改为对应的.htm
rename 's//.html$//.htm$/' *.html
去bak后缀
rename 's//.bak$//' *.bak
将文件名大写改为小写
rename 'y/A-Z/a-z/' *
但rename不能递归修改。
2.递归改名,用find+rename
将文件名的abc改为xyz
find . -name "abc*" -exec rename 's/abc/xyz/' {} /;
该命令可以将当前目录下所有子目录的文件都改名。
3.内容替换,用find+sed
将所有ablo 替换为ablozhou
find . -type f -exec sed -i -e "s/ablo/ablozhou/g" {} /;
sed 命令 -i 表示 --in-place,文件原地替换。-e 后跟替换表达式
rename 语法:
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
-v表示显示详细信息,-n表示不实际执行替换,只是看哪些文件会受影响。 -f 表示强制,不管是否有重名。
perlexpr是perl语法的表达式, files则是匹配项。因此,该命令执行结果与perlexpr有关,不一定就是改文件名。
实例: 将所有文件名*.html 改为对应的.htm
rename 's//.html$//.htm$/' *.html
去bak后缀
rename 's//.bak$//' *.bak
将文件名大写改为小写
rename 'y/A-Z/a-z/' *
但rename不能递归修改。
2.递归改名,用find+rename
将文件名的abc改为xyz
find . -name "abc*" -exec rename 's/abc/xyz/' {} /;
该命令可以将当前目录下所有子目录的文件都改名。
3.内容替换,用find+sed
将所有ablo 替换为ablozhou
find . -type f -exec sed -i -e "s/ablo/ablozhou/g" {} /;
sed 命令 -i 表示 --in-place,文件原地替换。-e 后跟替换表达式
展开全部
1.用for灵活,文件名中字符替换,加日期等都可
先用下面语句测试一下
for i in *aa* ;do NN=$(echo $i | sed 's/aa/bb/') ;echo "$NN";done
保险起见,只拷贝
for i in *aa* ;do NN=$(echo $i | sed 's/aa/bb/') ;cp "$i" "$NN";done
这是更名,慎用
for i in *aa* ;do NN=$(echo $i | sed 's/aa/bb/') ;mv "$i" "$NN";done
2.用rename简洁
先用-n开关测试
rename -n 's/aa/bb/' *
测试无误去掉-n进行更名
rename 's/aa/bb/' *
先用下面语句测试一下
for i in *aa* ;do NN=$(echo $i | sed 's/aa/bb/') ;echo "$NN";done
保险起见,只拷贝
for i in *aa* ;do NN=$(echo $i | sed 's/aa/bb/') ;cp "$i" "$NN";done
这是更名,慎用
for i in *aa* ;do NN=$(echo $i | sed 's/aa/bb/') ;mv "$i" "$NN";done
2.用rename简洁
先用-n开关测试
rename -n 's/aa/bb/' *
测试无误去掉-n进行更名
rename 's/aa/bb/' *
追问
我试了一下,文件夹的名字修改了,但是文件夹里面的文件和文件内容没有修改。能不能再帮忙看看?如果一条语句不好写的话,分开也行。
追答
MYPWD=$(pwd);find -type d |sort -r | while read line ;do cd "$line" ; rename 's/aa/bb/' * ;cd "$MYPWD";done
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、批量递归将 文件名字中的 abc 替换成 xyz
find . -name "abc*" | xargs rename abc xyz
2、批量递归将文件中的 abc 替换 成xyz
sed -i 's/abc/xyz/g' `grep -rl "abc" .`
find . -name "abc*" | xargs rename abc xyz
2、批量递归将文件中的 abc 替换 成xyz
sed -i 's/abc/xyz/g' `grep -rl "abc" .`
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询