dn833 发表于 2012-08-31 09:15

sed版ls |sed -r -n 's/(.*)bak(.*)/mv & \1_BAK_\2/e'

weichanghe2000 发表于 2012-08-31 09:20

本帖最后由 weichanghe2000 于 2012-08-31 09:21 编辑

回复 20# blackold


恩,是的。find 用来查找 bak 文件,sed 用来 替换 bak 为 BAK,而 xargs 应该是 一个一个的处理, mv 就是 改名字了。
但我 组合过了,总是出错,弄不出来。
请 blackold 大侠 帮助,谢谢啦。

blackold 发表于 2012-08-31 09:29

回复 22# weichanghe2000


    把你的命令放上来看看啊。

weichanghe2000 发表于 2012-08-31 09:37

回复 23# blackold

find . -name "*bak*" | xargs -t -i mv {}`echo {} |sed 's/bak/BAK/g' `

   

blackold 发表于 2012-08-31 09:59

回复 24# weichanghe2000


    这样写不行。为什么非得要全部用上这几个命令呢?
非要用,可以这样写:
find . -name "*bak*" | xargs -I {} echo {}|sed 'h;s/bak/BAK/g;x;G;s/\n/ /;s/^/mv -i/'|sh

不过没有人写这样的命令。

weichanghe2000 发表于 2012-08-31 10:09

本帖最后由 weichanghe2000 于 2012-08-31 10:24 编辑

回复 21# dn833

顶,这个方法so good,是我的水平能够接受的,呵呵。简单明了,谢谢撒。


   

weichanghe2000 发表于 2012-08-31 10:30

本帖最后由 weichanghe2000 于 2012-08-31 16:57 编辑

回复 25# blackold


谢谢撒。这个估计是 sed 的 高级用法了,好复杂。
那我放弃用 那些命令的组合 了,
仍然感谢大侠的热心帮助。

jason680 发表于 2012-08-31 12:59

本帖最后由 jason680 于 2012-08-31 13:02 编辑

回复 27# weichanghe2000

some bug when directory name have the "bak" word

# find . -name "*bak*" | xargs -i echo {}|sed 'h;s/bak/BAK/g;x;G;s/\n/ /;s/^/mv -i /'
mv -i ./bak ./BAK
mv -i ./bak/archbak2_con.ini ./BAK/archBAK2_con.ini
mv -i ./bak/archbak1.txt ./BAK/archBAK1.txt


   

wmz1101 发表于 2019-01-30 08:39

find ./ -name "*bak" |xargs -l1 -I{} rename bak _BAK_
页: 1 2 [3]
查看完整版本: shell中如何用find,exec,xargs,mv命令组合批量替换文件名中的字符串