提供一个在Linux下使用Shell脚本来批量改名的方法,我很久不用Windows系统了,所以只有Linux下的方法。
我这边在Linux下的测试过程是下面这样的:
「0」提醒:在终端terminal中,第一步就是把当前目录切换到文件所在目录,用cd命令。
「1」新建文件夹,起名为「rename_by_source」,用来放置「改名前的文件」、�.shellèæ¬æ件ãããæ件å对åºæ件ãï¼ä»¥åä¿åãæ¹ååçæ件ããä½ å¨èªå·±çµèä¸æä½æ¶ï¼ä¹å»ºè®®ä½ æä¸è½½ä¸æ¥çéè¦æ¹åçæ件æ¾å°ä¸ä¸ªåç¬çæ件夹éï¼è¿æ ·å®¹ææ¥çä¸äºã
ã2ãææ°å»ºçãrename_by_sourceãæ件夹ä¸ï¼æ ¹æ®ä½ ç»çæ件å对åºè¡¨ï¼æ°å»ºäº4个ãæ¹ååçæ件ãï¼å®ä»¬æ¯ç©ºç½æ件ï¼åªæ¯æ个æ件åèå·²ï¼å¦å¤ï¼ä¼°è®¡æ件类åæ¯mp3æ件ï¼æ以åç¼åæ¯.mp3ï¼å¦æä½ çæ件ä¸æ¯mp3ç±»åçè¯ï¼è¯·å±æ¶èªè¡å¨shellèæ¬æ件éæ´æ¹ç¸å ³ç代ç è¡ã
ã3ãå¨æ件夹ä¸ï¼æ°å»ºäºãsource_name.txtãæ件ï¼ç¨æ¥æ¾ç½®ï¼æ¹ååï¼ä¸ï¼æ¹ååï¼ç对åºæ件åï¼è·ä½ ç»çå¾çä¸æ ·ï¼ä¹æ¯ä¸è¡å¯¹åºä¸ä¸ªæ件çï¼åªä¸è¿ï¼ærené£ä¸åå é¤äºãå¦æä½ è¦ç´æ¥ä½¿ç¨ä¸é¢æä¾çshellèæ¬çè¯ï¼ä¹è¯·æä½ çæ件å对åºæ件ä¸çrené£ä¸åå é¤ï¼å¹¶ä¸ãæ°åãåçåé¢ä¸è¦æç©ºæ ¼æå ¶å®å符ãåæ¶ï¼ä½ çæ件å对åºæ件ä¹è¯·ä¿å为ãsource_name.txtãè¿ä¸ªå称åæ ¼å¼çæ件ã
ã4ãshellèæ¬æ件ãrename_by_source.shãï¼å 容å¦ä¸ï¼
#!/bin/bashcat source_name.txt | while read LINE
do
ori_name=${LINE:0:7}
des_name=${LINE:8}
cp "${ori_name}.mp3" "${des_name}.mp3"
done
解éä¸ä¸ï¼ç¬¬3å¥æ¯éè¡è¯»åsource_name.txtçå 容ï¼å¹¶èµå¼ç»åéLINEï¼ç¬¬5å¥æ¯æ该è¡ç第1è³ç¬¬8个å符ä½ä¸ºåå§æ件åï¼ç¬¬6å¥æ¯æ该è¡ç第9è³æ«å°¾çå符串ä½ä¸ºæ°æ件åï¼ç¬¬7å¥æ¯å¨å½åæ件夹ä¸ãå¤å¶ãï¼åå§æ件å.mp3ï¼æ件并éå½å为ï¼æ°æ件å.mp3ï¼æ件ã
ä¹æ以éç¨ãå¤å¶ãèä¸æ¯ã移å¨ãå½ä»¤ï¼ä¸»è¦è¿æ¯å¸æé¿å 误æä½ã
ã5ãå¨åé¢çæ件夹ä¸ï¼æ°å»ºå¹¶ä¿åä¸è¿°shellèæ¬æ件ï¼ç¶åå¨ç»ç«¯terminaléèµäºæ¤shellèæ¬æ件çå¯æ§è¡æéï¼åæ£ä¹æ²¡æä»ä¹å ³ç³»ï¼ææ¯ç´æ¥æ¹ä¸ºäº777æéï¼
sudo chmod 777 rename_by_source.shã6ãå¨ç»ç«¯ä¸ï¼å¨å½åæ件夹ä¸è¿è¡ä¸è¿°shellèæ¬æ件ï¼
./rename_by_source.shå®æã
ä¸é¢æ¯æè¿éçæµè¯æªå¾ï¼
æå®ã
ä¸è¿°shellèæ¬åæ¼ç¤ºæ件çï¼å·²æ¾å ¥ç¾åº¦ç½çï¼é¾æ¥: ã1F-3Mc2n5-8a4QSCNAVpDfgãï¼ æåç : ã82jdãï¼è¯·èªåï¼æææ7天ï¼ï¼é¾æ¥çåé¢é¨åï¼è¯·èªè¡è¡¥å ãï¼
å¦æ帮å©ï¼ç¦è¯·é纳ï¼è°¢è°¢ï¼
rename的参数rename命令的格式:
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
第一个参数:被替换掉的字符串
第二个参数:替换成的字符串
第三个参数:匹配要替换的文件模式
例子:rename main1.c main.c main1.c 将main1.c重命名为main.c
rename支持通配符
? 可替代单个字符
* 可替代多个字符
[charset] 可替代charset集中的任意单个字符
例子:文件夹中有这些文件foo1, ..., foo9, foo10, ..., foo278,
如果使用 rename foo foo0 foo?
会把foo1到foo9的文件重命名为foo01到foo09,重命名的文件只是有4个字符长度名称的文件,文件名中的foo被替换为foo0。
如果使用 rename foo foo0 foo??
foo01到foo99的所有文件都被重命名为foo001到foo099,只重命名5个字符长度名称的文件,文件名中的foo被替换为foo0。
如果使用 rename foo foo0 foo*
foo001到foo278的所有文件都被重命名为foo0001到foo0278,所有以foo开头的文件都被重命名。
如果使用 rename foo0 foo foo0[2]*
从foo0200到foo0278的所有文件都被重命名为foo200到foo278,文件名中的foo0被替换为foo。
rename支持正则表达式
例子:
字母的替换rename "s/AA/aa/" * //把文件名中的AA替换成aa
修改文件的后缀rename "s//.html//.php/" * //把.html 后缀的改成 .php后缀
批量添加文件后缀rename "s/$//.txt/" * //把所有的文件名都以txt结尾
批量删除文件名rename "s//.txt//" * //把所有以.txt结尾的文件名的.txt删掉
也可以参考《Linux就该这么学》中的章节内容尝试解决。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)