rename 简单用法小记。
整理文件时,把所有壁纸都放在一起,但名字太乱了。如果在 win 下,直接全选重命名就行了。 linux 下有命令行。。可是。。好难。经过了好几天的摸索,总算把整个文件夹里边的文件名变得整齐了,但是也丢了好多图片,也不重要了。
当时有 一大串字母的,长短不齐的数字的,以及中文的。思路:剔除非数字的其他字符,然后再统一数字位数,比如筛选九位以上的,把前四位替换为空。然后遇到个别重复的,手动改一下就好了。
先是 man rename,里边有简单的例子:
rename 's/\.bak$//' *.bak
把所有 bak 后缀的文件(*.bak),去掉结尾处的 .bak (.bak$),变为空。
rename 'y/A-Z/a-z/' *
把所有大写字母(A-Z)变为小写字母(a-z)
网上查了一堆,说 rename 能支持 正则表达式,其实有很多不支持。
我弄来弄去有一次把所有文件全面加了点号 . 于是变隐藏了,ls 也没法显示。还有一次 前面加了横杠 - ,这时 rename 也用不了。这时找到一个脚本可用。
find . -type f -name "*.jpg" |
while read name; do
na=$(echo $name | tr '-' '')
mv "$name" "$na"
done
name 后面的引号里边是筛选,tr 后面是查找和替换。
还有一行 sed 命令支持 . 匹配单个字符(rename 和 tr 都不支持),
for i in 'ls';
do mv -f $i "echo $i | sed 's/.jpg$//'";
done
in 后面是筛选,斜杠之间是查找替换。
一些通用的正则表达式,更多请自行百科:
^ 开头 $ 结尾 * 任意多个字符 . 单个字符 [0-9] 数字 [A-Za-z] 字母
注意:mv命令可能会造成不可逆的文件丢失,所以要给定好筛选范围,做好备份。