求高人改正程序错误

sh/bash/dash/ksh/zsh等Shell脚本
回复
youwang
帖子: 5
注册时间: 2012-11-01 10:46
系统: opensuse 12.2

求高人改正程序错误

#1

帖子 youwang » 2012-12-20 9:04

我想把目录下的*.c依次改为1.txt 2.txt 3.txt.....
自己写的b.sh:
#!/bin/bash
for file in ‘ls *.c'
do
mv $file $i.txt
i=$i+1
done
运行如下:

cook@linux-ir2d:~/downloads/ff> ./b.sh
mv: 目标".txt" 不是目录

反复改就是不行。请高人指点。
我试了3楼的方法。改了一下,用于改*.pdf。
cook@linux-ir2d:~/downloads/test/RH135> ls -1 *.pdf|awk '{S[$NF]} END {for(a in S) {++n;print "mv",a, n".pdf"}}'|sh
mv: 无法获取"Kickstart\324\332workstation\326\320ʵ\317\326.pdf" 的文件状态(stat): 没有那个文件或目录
mv: 无法获取"nfs_cifs.pdf" 的文件状态(stat): 没有那个文件或目录
mv: 无法获取".pdf" 的文件状态(stat): 没有那个文件或目录
mv: 无法获取"\274ƻ\256\310\316\316\361.pdf" 的文件状态(stat): 没有那个文件或目录
mv: 无法获取"\267\303\316\312\303\374\301\356\320\320.pdf" 的文件状态(stat): 没有那个文件或目录
mv: 无法获取"\267\326\316\366\272ʹ洢\310\325־.pdf" 的文件状态(stat): 没有那个文件或目录
mv: 无法获取"Server.pdf" 的文件状态(stat): 没有那个文件或目录
mv: 无法获取"Anaconda\260\262װ\306\367.pdf" 的文件状态(stat): 没有那个文件或目录
mv: 无法获取"\323û\247\271\334\300\355.pdf" 的文件状态(stat): 没有那个文件或目录
mv: 无法获取"\304ں\313\311\375\274\266\272ʹ\253\313Ͳ\316\312\375.pdf" 的文件状态(stat): 没有那个文件或目录
mv: 无法获取"SELinux.pdf" 的文件状态(stat): 没有那个文件或目录
mv: 无法获取"ldap\315\370\302\347\325ʻ\247\271\334\300\355.pdf" 的文件状态(stat): 没有那个文件或目录
mv: 无法获取"\311\372\263\311kickstart\275ű\276\316ļ\376.pdf" 的文件状态(stat): 没有那个文件或目录
mv: 无法获取"vim\263\243\323ü\274\307\311.pdf" 的文件状态(stat): 没有那个文件或目录
mv: 无法获取"\316ļ\376\267\303\316ʿ\330\326\306ACL.pdf" 的文件状态(stat): 没有那个文件或目录
结果只改到29.pdf后面在就不行了。

感谢6楼、七楼。我参考你们的,又改了一下,达到效果了:
#!/bin/bash
i=1
for file in `ls *.c`
do
mv $file $i.txt
echo "rename $file to $i.txt"
let "i+=1"
done
七楼的方法也对,就是有点不 好懂,我慢慢分析,谢谢!
七楼请看吧:
cook@linux-ir2d:~/downloads/test/RH135> ls -1 *.pdf|awk '{S[$NF]} END {for(a in S) {++n;print "mv",a, n".pdf"}}'|sh
mv: 无法获取"Kickstart\324\332workstation\326\320ʵ\317\326.pdf" 的文件状态(stat): 没有那个文件或目录
mv: 无法获取"nfs_cifs.pdf" 的文件状态(stat): 没有那个文件或目录
mv: 无法获取".pdf" 的文件状态(stat): 没有那个文件或目录
mv: 无法获取"\274ƻ\256\310\316\316\361.pdf" 的文件状态(stat): 没有那个文件或目录
mv: 无法获取"\267\303\316\312\303\374\301\356\320\320.pdf" 的文件状态(stat): 没有那个文件或目录
mv: 无法获取"\267\326\316\366\272ʹ洢\310\325־.pdf" 的文件状态(stat): 没有那个文件或目录
mv: 无法获取"Server.pdf" 的文件状态(stat): 没有那个文件或目录
mv: "12.pdf" 与"12.pdf" 为同一文件
mv: 无法获取"Anaconda\260\262װ\306\367.pdf" 的文件状态(stat): 没有那个文件或目录
mv: 无法获取"\323û\247\271\334\300\355.pdf" 的文件状态(stat): 没有那个文件或目录
mv: 无法获取"\304ں\313\311\375\274\266\272ʹ\253\313Ͳ\316\312\375.pdf" 的文件状态(stat): 没有那个文件或目录
mv: 无法获取"SELinux.pdf" 的文件状态(stat): 没有那个文件或目录
mv: 无法获取"ldap\315\370\302\347\325ʻ\247\271\334\300\355.pdf" 的文件状态(stat): 没有那个文件或目录
mv: 无法获取"\311\372\263\311kickstart\275ű\276\316ļ\376.pdf" 的文件状态(stat): 没有那个文件或目录
mv: 无法获取"vim\263\243\323ü\274\307\311.pdf" 的文件状态(stat): 没有那个文件或目录
mv: 无法获取"\316ļ\376\267\303\316ʿ\330\326\306ACL.pdf" 的文件状态(stat): 没有那个文件或目录
cook@linux-ir2d:~/downloads/test/RH135> ls -l
总用量 10836
-rw-r--r-- 1 cook users 624132 7月 6 08:46 10.pdf
-rw-r--r-- 1 cook users 332998 7月 6 08:44 11.pdf
-rw-r--r-- 1 cook users 1146457 7月 6 08:44 12.pdf
-rw-r--r-- 1 cook users 352398 7月 6 08:44 13.pdf
-rw-r--r-- 1 cook users 354844 7月 6 08:45 17.pdf
-rw-r--r-- 1 cook users 369824 7月 6 08:44 19.pdf
-rw-r--r-- 1 cook users 518259 7月 6 08:44 1.pdf
-rw-r--r-- 1 cook users 500187 7月 6 08:44 23.pdf
-rw-r--r-- 1 cook users 371073 7月 6 08:45 3.pdf
-rw-r--r-- 1 cook users 324344 8月 17 16:02 RHCE_RHEL6_134 U1.3 Kickstart??workstation??ʵ??.pdf
-rw-r--r-- 1 cook users 295796 8月 17 16:02 RHCE_RHEL6_135 U1.0 Anaconda??װ??.pdf
-rw-r--r-- 1 cook users 425864 8月 17 16:01 RHCE_RHEL6_135 U10 ldap?????ʻ?????.pdf
-rw-r--r-- 1 cook users 467730 8月 17 16:01 RHCE_RHEL6_135 U11 ?ļ????ʿ???ACL.pdf
-rw-r--r-- 1 cook users 798359 8月 17 16:02 RHCE_RHEL6_135 U1.2 ????kickstart?ű??ļ?.pdf
-rw-r--r-- 1 cook users 712124 8月 17 16:01 RHCE_RHEL6_135 U12 SELinux.pdf
-rw-r--r-- 1 cook users 567530 8月 17 16:01 RHCE_RHEL6_135 U13 yum Server.pdf
-rw-r--r-- 1 cook users 699931 8月 17 16:00 RHCE_RHEL6_135 U15 ?????ʹ洢??־.pdf
-rw-r--r-- 1 cook users 351666 8月 17 16:00 RHCE_RHEL6_135 U16.2 ?ƻ?????.pdf
-rw-r--r-- 1 cook users 197197 8月 17 16:00 RHCE_RHEL6_135 U17.1 ?ں??????ʹ??Ͳ???.pdf
-rw-r--r-- 1 cook users 341360 8月 17 16:02 RHCE_RHEL6_135 U2 ??????????.pdf
-rw-r--r-- 1 cook users 177786 8月 17 16:01 RHCE_RHEL6_135 U3.3 vim???ü???.pdf
-rw-r--r-- 1 cook users 323566 8月 17 16:01 RHCE_RHEL6_135 U4.2 grep&cut&tee&tr .pdf
-rw-r--r-- 1 cook users 467447 8月 17 16:01 RHCE_RHEL6_135 U8 ???????繲?? nfs_cifs.pdf
-rw-r--r-- 1 cook users 327085 8月 17 16:01 RHCE_RHEL6_135 U9 ?û?????.pdf
cook@linux-ir2d:~/downloads/test/RH135>
上次由 youwang 在 2012-12-20 11:29,总共编辑 8 次。
头像
枫叶饭团
帖子: 14683
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
联系:

Re: 求改名程序

#2

帖子 枫叶饭团 » 2012-12-20 9:47

i初始化了么?
hunter108
帖子: 112
注册时间: 2009-11-02 10:29

Re: 求改名程序

#3

帖子 hunter108 » 2012-12-20 9:48

ls -1 *.c|awk '{S[$NF]} END {for(a in S) {++n;print "mv",a, n".txt"}}'|sh

“ls -1 *.c”中是数字“1",不是"L",当前目录中不可存在"1.txt","2.txt"等等重复的文件名出现,不然会丢失文件!也就是不能在同一目录中执行二次以上的上述脚本,不然后果自负。。。。,实在不放心可以去除最后的"|sh",也就是执行
ls -1 *.c|awk '{S[$NF]} END {for(a in S) {++n;print "mv",a, n".txt"}}'
则只输出前段脚本的执行结果,并不实现真正的改名,确定无误后,才完整的执行脚本。
头像
YeLee
论坛版主
帖子: 26406
注册时间: 2008-08-13 8:48
系统: Fundu i64
来自: 东海硇州,一双管钥。
联系:

Re: 求改名程序

#4

帖子 YeLee » 2012-12-20 10:16

话说,不是有个perl写的rename吗? :em01 :em01 :em01
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
头像
nkadun
帖子: 444
注册时间: 2008-06-10 12:40

Re: 求改名程序

#5

帖子 nkadun » 2012-12-20 10:37

好压2345有个批量改名程序
Macbook Pro 15 with Debian
又剁了一只手
头像
YeLee
论坛版主
帖子: 26406
注册时间: 2008-08-13 8:48
系统: Fundu i64
来自: 东海硇州,一双管钥。
联系:

Re: 求高人改正程序错误

#6

帖子 YeLee » 2012-12-20 10:52

代码: 全选

index=1
for i in *.pdf
do
    mv "$i" "$index.pdf"
    let "index+=1"
done
有点规律的东西。 :em01 :em01 :em01
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
hunter108
帖子: 112
注册时间: 2009-11-02 10:29

Re: 求改名程序

#7

帖子 hunter108 » 2012-12-20 10:53

只改到29,是因为遇到错误,程序中止运行了,你~/downloads/test/RH135,这目录下有些什么文件,ls -l发上来瞧瞧,有没有含特殊符号的文件?
回复