linux中循环删除脚本,shell脚本:遍历删除

遍历删除文本内路径上文件

windows上测试可以安装Git linux中,准备删除文件的脚本deleteFile.sh,picture.txt保存待删除文件的文件路径,picture文件夹下面有三张待删除图片a/b/c.jpg

deleteFile.sh脚本如下:

#!/bin/bash

#shell脚本 保存路径的文本

#./deleteFile.sh ./picture.txt

#判断位置参数是否为1

if [ $# -ne 1 ];then

echo "Usage $0 filename"

exit

fi

#判断位置参数是否为文件

if [ ! -f $1 ];then

echo "the $1 is not a file"

exit

fi

#待删除文件路径的文本

filename=$1

echo "filename: $filename" >> info.txt

#计算待删除的文件数量(总行数)

NUM=`sed -n '$=' $filename`

echo "picture delete num: $NUM"

#逐行读取文件内容并删除对应路径的文件

success=0

for i in `cat $filename`

do

#成功信息重定向输出到info.txt

echo "delete success: $i" >> info.txt

rm -rf $i

success=`expr $success 1`

done

echo "success delete num: $success"

执行./deleteFile.sh ./pictureWIn.txt命令后,权限不够,使用chmod命令对shell脚本赋予权限 chmod 777 ./deleteFile.sh

看到打印的语句,命令已经执行,但是最后图片缺没有全部删除,只删除了最后一张c.jpg

修改pictureWIn.txt文件内容,发现只有放在最后一行的数据能被删除成功,前面的数据都删除失败

:<

直接执行三条删除语句,又是可以成功删除三张图片。

#----------------------------Test----------------------------------

#for循环读取文件内容并保存到picture数组

n=1

for i in `cat $filename`

do

picture[$n]=$i

#echo "picture[$n]: $i"

#rm -rf $picture[$n]

n=`expr $n 1`

done

#while循环读取文件内容并保存到delete数组

i=1

while read line

do

delete[$i]="$line"

i=`expr $i 1`

done < $filename

#遍历数组并删除文件

#for i in ${picture[*]}

#for i in `seq $NUM`

for ((i=NUM;i>=1;i--))

do

echo "delete success: ${picture[$i]}"

rm -rf ${picture[$i]}

done

尝试将文本内容读取后存放在数组,然后再删除,结果还是一样。

偶然间发现存放删除文件路径的文本是在windows下创建的,在linux下新建picture.txt文件,执行./deleteFile.sh ./picture.txt命令后,成功删除。

在Linux下和Windows下新建一个文本文件,注意只是新建,并不向文件中写入数据,此时两个文件是一样的。此时的文件(不管是何处新建的)放在Windows下和Linux下都是一样的。

但是一旦修改则不一样。在Linux下修改并保存,则换行是 \n ,在Windows下修改并保存,则换行是 \r \n 。

并且,一旦修改并保存,则该文件的换行是 \n 还是 \r \n 都是不会变了,除非人为的修改,只是修改保存其中的内容,换行的内容是不会变的。例如:换行是 \n 的文件放在Windows下增加一个换行(使用的编辑工具是Nodepad ),Windows下增加的换行还是 \n ;换行是 \r \n 的文件放在Linux下增加一个换行(使用的工具是vim),Linux下增加的换行还是 \r \n 。

遍历删除路径下带有指定字符串的文件

系统生成的zip和xlsx文件带有日期(如20191212xxxx.zip),一段时间后需要删除之前无用的文件,或者移除文件到/recycleBin回收站中。

#!/bin/bash

#移除/删除文件路径

removeFolder="../recycleBin"

dir="./"

#输入待删除文件的日期 ./deleteZip.sh 20191212

removedate=$1

#判断位置参数是否为空

if [ $# -ne 1 ];then

echo "Usage $0 removedate"

exit

fi

echo "removedate: $removedate"

#获取文件夹下面所有文件名称

files=$(ls $dir)

#echo $files

#循环遍历删除匹配的文件

for file in ${files[*]}

do

#echo $file

# 删除压缩包文件

if [[ $file = $removedate*.zip ]];then

echo "delete $dir/$file"

rm -rf $dir/$file

#echo "remove $dir/$file to $removeFolder"

#mv ./$file $removeFolder/.

# >> del$removedate.log

fi

# 删除excel文件

if [[ $file = $removedate*.xlsx ]];then

echo "delete $dir/$file"

rm -rf $dir/$file

#echo "remove $dir/$file to $removeFolder"

#mv ./$file $removeFolder/.

# >> del$removedate.log

fi

done

echo "delete success!"

设置固定时间自动执行脚本

crontab -e #设置自动执行

51 16 * * 1 sh ../shell/deleteZip.sh #设置每个周一的16:51时,自动执行deleteZip.sh脚本

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值