用 Sql*Plus 创建批量文件改名的脚本

| 1 Comment

用户要求对一个目录下的大量图片进行文件名修改。并给了一个对照文件:

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

1 Comment

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:我的办法还是太笨