zoukankan      html  css  js  c++  java
  • shell脚本:遍历删除文本内路径上文件

    windows上测试可以安装Git
    file

    file
    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脚本赋予权限
    file
    看到打印的语句,命令已经执行,但是最后图片缺没有全部删除,只删除了最后一张c.jpg

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

    :<<!
    echo "./picture/a.jpg"
    rm -rf ./picture/a.jpg
    echo "./picture/b.jpg"
    rm -rf ./picture/b.jpg
    echo "./picture/c.jpg"
    rm -rf ./picture/c.jpg
    !
    直接执行三条删除语句,又是可以成功删除三张图片。

    ----------------------------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下修改并保存,则换行是 ,在Windows下修改并保存,则换行是 。

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

  • 相关阅读:
    磁盘IO工作机制
    java 的IO类库的基本架构
    诡异的NPE--三目运算自动类型转换
    WIN2008服务器不能复制粘贴怎么办
    用nrm一键切换npm源
    Linux常用命令大全(非常全!!!)
    整理 node-sass 安装失败的原因及解决办法
    win10完美去除小箭头
    JS中slice,splice,split的区别
    Win10环境下Redis和Redis desktop manager 安装
  • 原文地址:https://www.cnblogs.com/chen-chen-chen/p/12176956.html
Copyright © 2011-2022 走看看