ITPub博客

首页 > 自动化运维 > 应用服务器 > [20220329]批量修改文件名.txt

[20220329]批量修改文件名.txt

原创 应用服务器 作者:lfree 时间:2022-03-28 09:31:55 0 删除 编辑

[20220329]批量修改文件名.txt

--//工作需要需要修改文件名,例子如下:

D:\tmp\xxx>dir /b
0001.aaa
0001.bbb
0001.ccc
0001.d d

--//前面的0001重新编号,使用0001,0002,0003,0004代替.在windows下操作有一点难度,测试看看.

D:\tmp\xxx>dir /b | sed -e "s+^+mv \"+" -e "s+$+\"+
mv "0001.aaa"
mv "0001.bbb"
mv "0001.ccc"
mv "0001.d d"

D:\tmp\xxx>dir /b | sed -e "s+^0001+\"@+" -e "s+$+\"+
"@.aaa"
"@.bbb"
"@.ccc"
"@.d d"

--//有点奇怪的是sed在windows下最后不能重定向到文件.
D:\tmp\xxx>dir /b | sed -e "s+^0001+\"@+" -e "s+$+\"+ > a1.txt
sed: -e expression #2, char 8: Unknown option to 's'
--//少写一个引号".昏前面少写引号也能通过.
dir /b | sed -e "s+^0001+\"@+" -e "s+$+\"+" > a1.txt

--//建立如下文本:
mv "0001.aaa" "@.aaa"
mv "0001.bbb" "@.bbb"
mv "0001.ccc" "@.ccc"
mv "0001.d d" "@.d d"

--//在vim下执行,注意要安装Increment插件.
:%Inc s1 i1 w4 f0

--//执行后变成如下:
mv "0001.aaa" "0001.aaa"
mv "0001.bbb" "0002.bbb"
mv "0001.ccc" "0003.ccc"
mv "0001.d d" "0004.d d"

--//然后执行它就ok了.

D:\tmp\xxx>a1
D:\tmp\xxx>mv "0001.aaa" "0001.aaa"
mv: `0001.aaa' and `0001.aaa' are the same file

D:\tmp\xxx>mv "0001.bbb" "0002.bbb"
D:\tmp\xxx>mv "0001.ccc" "0003.ccc"
D:\tmp\xxx>mv "0001.d d" "0004.d d"

--//windows下还有什么简单的方法呢.
--//在windows执行如下:
D:\tmp\xxx>dir /b | xargs -iQ echo mv  Q Q
 0001.aaaaa
 0002.bbbbb
 0003.ccccc
 0004.d d d
--//什么这样.奇怪.在一行完成有一些困难.

D:\tmp\xxx>for /F "delims=="  %i in ('dir /b 0001.*') do @echo mv  "%i" "%i" | sed "s/0001/@/2"
mv  "0001.aaa" "@.aaa"
mv  "0001.bbb" "@.bbb"
mv  "0001.ccc" "@.ccc"
mv  "0001.d d" "@.d d"
--//在vim下执行,注意要安装Increment插件.
:%Inc s1 i1 w4 f0

--//linux下如下执行呢?感觉差不多,放弃测试.
--//再看看前面使用xargs 什么回事.哦想起来了,回车换行问题,这是windwows的文本的默认模式..
--//要给文件名加入引号,再次看到windows的变态模式,一定要写成如下,我自己都看不明白^_^.

D:\tmp\xxx>dir /b | xargs -iQ echo -e  mv "\""""""Q\""""""" "\""""""Q\""""""" | tr -d "\r"
mv "0001.aaa" "0001.aaa"
mv "0001.bbb" "0001.bbb"
mv "0001.ccc" "0001.ccc"
mv "0001.d d" "0001.d d"
mv "0001eee" "0001eee"

--//实际上相当于传入的参数时0001.aaa\r,在开始处理删除\r字符更加合理方便一些.
D:\tmp\xxx>dir /b | tr -d "\r" | xargs -iQ echo -e  "mv \""""""Q\""""""" \"""""""Q\"""""""
mv "0001.aaa" "0001.aaa"
mv "0001.bbb" "0001.bbb"
mv "0001.ccc" "0001.ccc"
mv "0001.d d" "0001.d d"
mv "0001eee" "0001eee"

--//简单一点就是没输出双引号,你就再加一个双引号直到出现为止.

总结:
--//再次提醒自己以后给注意windows下xargs -iQ 接受的参数带有\r字符。

--//其它情况通过管道接收的字串也要注意这个问题。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2884440/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969412