用户要求对一个目录下的大量图片进行文件名修改。并给了一个对照文件:
4930503541,2019030524 4932503521,2089031230 4932503800,2389031456 4900003521,2019031211 .....
对照文件中前面的是就名字,后面的是新名字。可实际一看真正的文件名字,就傻了眼:文件名字都是类似:4930503541_1.png、4932503521_2.png 之类的,本来想用个Shell脚本来做,现在看起来,不好实现呀!
干脆,用 Sql*Plus 来帮助创建脚本。先把对照文件上传到测试机器上,做个外部表先:
SQL> CREATE DIRECTORY forrename AS '/u01/app';
Directory created.
SQL> GRANT READ,WRITE ON DIRECTORY forrename TO SYSTEM;
Grant succeeded.
SQL>
SQL> CREATE TABLE forrename
2 (oldcode VARCHAR2(10),
3 newcode VARCHAR2(12))
4 ORGANIZATION EXTERNAL
5 (TYPE oracle_loader
6 DEFAULT DIRECTORY testdir
7 ACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINE
8 FIELDS TERMINATED BY ',')
9 LOCATION('code.txt'));
Table created.
创建完,验证一下.然后考虑拼写脚本:
SQL> set heading off
SQL> set echo off
SQL> set feedback off
SQL> spool /u01/app/myrename.sh
SQL> SELECT 'mv ' || oldcode || '_2.png' OLD,
2 ' DIR/' || SUBSTR (newcode, 1, 10) || '_2.png' NEW
3 FROM forrename;
得到的脚本内容如下:
mv 9030502700_2.png DIR/4009030530_2.png
mv 9030500100_2.png DIR/4009030504_2.png
mv 9030500200_2.png DIR/4009030505_2.png
mv 9030500300_2.png DIR/4009030506_2.png
mv 9030503800_2.png DIR/4009030541_2.png
mv 9030503400_2.png DIR/4009030537_2.png
mv 9030503500_2.png DIR/4009030538_2.png
然后创建其他对应后缀的改名脚本,_1.png,_3.png......
最后修改一下执行文件权限,执行.
关于外部表:三步教会你掌握oracle外表(external table) by Rudolf Lu
http://www.cnoug.org/viewthread.php?tid=2466
rollingpig
老不死会员的shell 解决办法:
对照文件:a.list
cat a.list | awk -F”,” ‘{print “mv ” $1″_1.png DIR/” $2″_1.png” }’ > /tmp/rename.sh
http://www.itpub.net/showthread.php?s=&postid=2123673#post2123673
BTW:我的办法还是太笨