AI智能
改变未来

Shell 批量替换文件名称

去除特定字符

[code]# 目标:将 2017-01-01.jpg、2018-01-01.jpg 改为 20170101.jpg、20180101.jpg# 方法:将所有 - 替换为空for file in `ls | grep .jpg`donewfile=`echo $file | sed \'s/-//g\'`mv $file $newfiledone

中间插入字符

[code]# 目标:将 book01.txt、paper02.txt 改为 book-01.txt、paper-02.txt# 方法:用分组匹配分别获取待插入位置两侧的字符串,再通过反向引用实现替换for file in `ls | grep .txt`donewfile=`echo $file | sed \'s/\\([a-z]\\+\\)\\([0-9]\\+\\)/\\1-\\2/\'`mv $file $newfiledone

文件名包含空格的解决方法

要解决这个问题,我们可以将 IFS(内部字段分隔符)设置为换行符 \\n,这样一来,for 循环就会按行来获取变量的值,确保每次获取的确实是一个完整的文件名。

[code]# 设置 IFS 变量的命令需要放在 for 循环之前:IFS=$\'\\n\'for file in `ls`do...done

例如,将所有大于1M,且后缀为txt或jpg的文件,由形如 book_20170101.txt、image_20170101.jpg 的文件改名为 20170101-book.txt、20170101-image.jpg,代码如下:

[code]for file in `find . -size +1M -name \"*_*.txt\" -o -name \"*_*.jpg\"`donewfile=`echo $file | sed \'s/\\([a-z]\\+\\)_\\([0-9]\\+\\)./\\2-\\1./\'`mv $file $newfiledone
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Shell 批量替换文件名称