Bash - 使用数组删除文件

时间:2013-11-25 20:06:33

标签: arrays bash

我有一个平面目录。我有2个阵列。 Array1存储目录的内容(所有.PNG个文件)。 Array2有六个文件。这六个文件与Array1中的六个文件相同。如何使用Array2删除目录中的6个文件?两个数组如下:

array1= (`ls ${files}*.PNG`)
array2= $(find . ! -name 'PHOTO*')

尝试使用for循环但不确定如何继续:

for files in $array2;do
    rm -f files $array1

1 个答案:

答案 0 :(得分:6)

  1. 在作业中=后,不允许有空格。

  2. 不要解析ls。您的代码不适用于名称包含空格的文件。

    array1=( "${files}"*.png )
    
  3. 您的array2不是数组;它是一个字符串,由一系列由空格分隔的文件名组成。

    array2=( $(find . ! -name 'PHOTO*') )
    

    此外,在这样的命令替换中使用find可能会失败,原因与2)中概述的相同。请改用扩展模式(通过运行shopt -s extglob激活):

    array2=( !(PHOTO*) )
    
  4. 要迭代数组中的文件,首先需要将数组扩展为一个单词序列,每个单词一个元素:

    for files in "${array2[@]}"; do
        rm -f "$files"
    done