我想用linux的命令批量修改文件夹及子文件夹里包含某个字符的文件名称

liangcaijian 2019-05-10 09:55:09
大家好,我想把文件夹以及子文件夹里所有.jpg后面有?sign的图片修改文件名称,类似于20180405095522_44158.jpg?sign=924ca3be4ffca6c5fbad798e7e643ab4&t=5ac588d3这样的文件名称修改成20180405095522_44158.jpg。如果没有带?sign的图片不用管,请问用linux命令代码是怎么写,由于刚接触linux,百度也没找方法。
...全文
445 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Garenliu 2019-06-11
  • 打赏
  • 举报
回复
#!/bin/bash
for file in `find /root/chongmingming/ -type f -name '*?sign*'` 
do
	newfile=`echo $file|cut -f 1 -d "?"`
	mv $file $newfile
done
学习中,测试了一下这个,是好使的。
cn_年华 2019-06-11
  • 打赏
  • 举报
回复
引用 3 楼 cn_年华 的回复:
for i in `find /home/user -name *jpg\?s*` ; do b=${i%%\?*} && mv $i $b;done
用find 解决子目录问题并指定绝对路径,通过字符串截取去掉?号后面的字符,做一个mv操作 即修改文件名。


find 好像找带符号的文件不好使,条件可以换成 `find /home/user -name "*jpg*sign*"`
cn_年华 2019-06-11
  • 打赏
  • 举报
回复
for i in `find /home/user -name *jpg\?s*` ; do b=${i%%\?*} && mv $i $b;done
用find 解决子目录问题并指定绝对路径,通过字符串截取去掉?号后面的字符,做一个mv操作 即修改文件名。
weixin_44665908 2019-05-11
  • 打赏
  • 举报
回复
用python应该不难完成
Mount_Dew 2019-05-10
  • 打赏
  • 举报
回复
可以通过管道连接shell和perl

for file in `ls|grep -P "jpg\?sign"`;do echo $file|perl -we 'while (<STDIN>){chomp;rename "$_","$1" if /^(.+)jpg\?sign/;}';done
由于自己经常利用浏览器插件下载网页图片,由此产生很多的文件夹和文件,这些文件夹的名字多半是网页的title,导致文件夹名很长,文件名多是些很长的数。感觉这样的状况不是很好就自己用java实现了简单的shell来管理这些自动下载的批量文件产生的文件夹和文件! 使用注意事项: 该程序默认的工作路径是c:\盘,建议在windows环境下利用这则小程序,linux下未测试。 这个简单的java shell拥有以下几个命令: cd 进入要工作的目录 ls 列出该工作目录下的文件和文件夹 re 对工作目录下的文件夹名或文件名进行改名操作 man 对具体的命令的详细帮助文档 pwd 显示当前工作的目录 history 显示已经输入的历史命令 help 调取帮助文档命令 exit 退出当前的程序 其中re修改文件以及文件夹名的命令是这个程序的价值体现。 re/cd/ls/man这四个命令拥有命令选项,在使用命令选项的规则统一是:xx-uuff其中xx代表命令,-代表分隔符是必须的,uu代表命令选项,ff代表具体需求的字符。 pwd/history/help/exit是单个输入的命令,没有命令选项。 利用这样的命令:man-cd就可以查看cd命令使用的具体介绍,其中-是必须的,其它带有命令选项的都可以通过这种方式查看命令帮助文档。 例如输入:man-re就会列出以下信息 对当前工作目录下的文件夹名和文件名进行改动的命令: re -j@#将目录下所有的文件夹名字中@#间(包括@#)内容去掉 re -q@将目录下所有文件夹名中@后(包括@)的内容去掉 re -h@将目录下所有文件夹名中@前(包括@)的内容去掉 re -k@将目录下所有文件名中的@去掉,当@为.时表示去掉名字中的空格(特注) re -m@#$将目录下所有文件名中的@#$去掉,这是去掉名字中多个字符命令 re -r@#将目录下所有文件名中的@用#替换掉 re -s@#$%将目录下所有文件名中的@用#替换,$用%替换,这是替换名字中多个字符命令 re -f+前面七个命令命令选项的话就是对该工作目录下的所有文件的文件名起相应作用(小心使用)! re -fh.ppp.xxx将目录下所有符合条件的文件的文件名的后缀ppp改成xxx!(较复杂,还未实现) re -fa将当前工作目录下的所有文件名按数字递增方式命!

19,612

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧