2013-11-25 2 views
1

플랫 디렉토리가 하나 있습니다. 나는 2 개의 배열을 가지고있다. Array1은 디렉토리의 내용을 저장합니다 (모두 .PNG 개 파일). Array2에는 6 개의 파일이 있습니다. 이 6 개의 파일은 Array1의 6 개 파일과 같습니다. Array2를 사용하여 디렉토리에서 6 개의 파일을 제거하려면 어떻게합니까?Bash - 배열을 사용하여 파일 제거

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

for 루프를 사용하려고했지만 진행하는 방법을 잘 :

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

'done' 명령을 잊어 버린 것 같습니다. – thom

+0

파일을 삭제하려고합니까, 아니면 배열'array1'에서 파일 이름을 삭제하려고합니까? – rici

답변

6
  1. 있는 공간이 할당에 = 후 허용되지 않는다 다음과 같이 두 배열입니다.

  2. ls을 구문 분석하지 마십시오. 이름에 공백이 포함 된 파일에는 코드가 작동하지 않습니다. 귀하의 array2

    array1=("${files}"*.png) 
    
  3. 가 배열이 아닌; 공백으로 구분 된 일련의 파일 이름으로 구성된 문자열입니다. 이 같은 명령으로 교체 find을 통해서도

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

    2에서 설명한 동일한 이유로) 실패 할 수있다. 대신 (shopt -s extglob를 실행하여 활성화) 확장 패턴을 사용하여

    array2=(!(PHOTO*)) 
    
  4. 배열의 파일을 반복하기를, 당신은 첫 번째 요소 단어마다 단어의 순서로 배열을 확장해야합니다

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