Linux程序设计(Linux shell编程的例子:批量处理文件)


各位看官们,咱们今天还是接着上一回的内容,列举具体的例子给大家。闲话休说,言归正转。


各位看官们,在实际的工作中经常需要批量处理文件,比如批量删除文件等。咱们今天就通过例子来说明

如何批量操作文件。咱们今天的内容有批量建立文件,批量重命名文件,批量删除文件。看官们批量本质

上是重复做相同的事情,这该使用什么操作?“循环”。台下已经有看官回答了。完全正确,咱们就是使用

循环操作来实现批量这个功能。新建文件,删除文件和重命名文件的命令:touch,rm,mv,我想大家都

记得如何使用这些命令吧。如果忘记的话,再通过咱们下面的例子来回顾一下。


各位看官们,新建立一个叫sample.sh的脚本文件,然后在里面输入布下的内容,并且保存。

#! /bin/bash

echo "-----------------the starting line of shell-----------------"

# create new files
for name in Test{1..3}.h
do
    touch $name
done

#show the files, which is created
for name in *.h
do
    echo $name
done

#rename the files
i=0
for name in *.h
do
    newname=${name%.*}-$i
    mv "$name" "$newname.h"
    let i++
done

#show the new files, which is renamed
for name in *.h
do
    echo $name
done

#remove the files
for name in *.h
do
    rm -rf $name
done

echo "-----------------the ending line of shell-----------------"


在终端中运行该程序可以得到以下的结果:

-----------------the starting line of shell-----------------

Test1.h

Test2.h

Test3.h

Test1-0.h

Test2-1.h

Test3-2.h

-----------------the ending line of shell-----------------


看官们,大家可以看到通过for循环操作实现了批量功能。该脚本文件会在脚本文件所在的目录中新建立

文件,大家可以把它放到自己定义的目录执行。该脚本中没有指定专门的目录,在显示文件的时候,也是

会遍历脚本所在目录中的.h文件,所以会把脚本第一阶段建立的.h文件显示出来。该方法在重命名和删除

文件时候也在使用。


看官们,在重命名的时候,有个新的知识需要和大家说明一下。name%.*表示把变量值中.前面的内容提取

出来。.后面是*表示匹配。例如:name的值是test1.h.经过提取后会得到test1,.h被舍弃。还有一种

方法:name#*.它表示把变量值中.后面的内容提取出来。例如:name的值是test1.h.经过提取后会得

到h,test1.会被舍弃。该方法在提取文件名,或者文件后缀时很有用。


各位看官们,今天的例子就到此为止,欲知后面还有什么好的例子,且听下回分解。

Shell脚本高级编程教程,希望对你有所帮助。 Example 10-23. Using continue N in an actual task: 1 # Albert Reiner gives an example of how to use "continue N": 2 # --------------------------------------------------------- 3 4 # Suppose I have a large number of jobs that need to be run, with 5 #+ any data that is to be treated in files of a given name pattern in a 6 #+ directory. There are several machines that access this directory, and 7 #+ I want to distribute the work over these different boxen. Then I 8 #+ usually nohup something like the following on every box: 9 10 while true 11 do 12 for n in .iso.* 13 do 14 [ "$n" = ".iso.opts" ] && continue 15 beta=${n#.iso.} 16 [ -r .Iso.$beta ] && continue 17 [ -r .lock.$beta ] && sleep 10 && continue 18 lockfile -r0 .lock.$beta || continue 19 echo -n "$beta: " `date` 20 run-isotherm $beta 21 date 22 ls -alF .Iso.$beta 23 [ -r .Iso.$beta ] && rm -f .lock.$beta 24 continue 2 25 done 26 break 27 done 28 29 # The details, in particular the sleep N, are particular to my 30 #+ application, but the general pattern is: 31 32 while true 33 do 34 for job in {pattern} 35 do 36 {job already done or running} && continue 37 {mark job as running, do job, mark job as done} 38 continue 2 39 done 40 break # Or something like `sleep 600' to avoid termination. 41 done 42 43 # This way the script will stop only when there are no more jobs to do 44 #+ (including jobs that were added during runtime). Through the use 45 #+ of appropriate lockfiles it can be run on several machines 46 #+ concurrently without duplication of calculations [which run a couple 47 #+ of hours in my case, so I really want to avoid this]. Also, as search 48 #+ always starts again from the beginning, one can encode priorities in 49 #+ the file names. Of course, one could also do this without `continue 2', 50 #+ but then one would have to actually check whether or not some job 51 #+ was done (so that we should immediately look for the next job) or not 52 #+ (in which case we terminate or sleep for a long time before checking 53 #+ for a new job).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值