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_