我有一个平面目录。我有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
答案 0 :(得分:6)
在作业中=
后,不允许有空格。
不要解析ls
。您的代码不适用于名称包含空格的文件。
array1=( "${files}"*.png )
您的array2
不是数组;它是一个字符串,由一系列由空格分隔的文件名组成。
array2=( $(find . ! -name 'PHOTO*') )
此外,在这样的命令替换中使用find
可能会失败,原因与2)中概述的相同。请改用扩展模式(通过运行shopt -s extglob
激活):
array2=( !(PHOTO*) )
要迭代数组中的文件,首先需要将数组扩展为一个单词序列,每个单词一个元素:
for files in "${array2[@]}"; do
rm -f "$files"
done