Bash - 특정 명령을 실행하지 못한 배열 요소 저장

Bash - 특정 명령을 실행하지 못한 배열 요소 저장
read -r -p "Enter the filenames: " -a arr

for filenames in "${arr[@]}"; do
   if [[ -e "${filenames}" ]]; then
        echo "${filenames} file exists (no override)"
   else
        cp -n ~/Documents/library/normal.py "${filenames}"
   fi
done

B.py D.py내가 폴더에 있다고 가정 해 봅시다 .

동일한 폴더에서 이 스크립트를 실행하고 명명된 file 에 A.py B.py C.py D.py(정의되지 않은 입력 수) 쓰면 성공적으로 복사됩니다.
A.py C.py

에 대해서는 와 가 B.py D.py각각 표시됩니다 .B.py file exists (no override)D.py file exists (not override)

기본 배열이 아닌 다른 배열 which did worked에 요소를 저장하고 싶습니다.which didn't work${arr[@]}

arr=('A.py' 'B.py' 'C.py' 'D.py')
didworked=('A.py' 'C.py')
notworked=('B.py' 'D.py')

어떻게 해야 하나요? 제안사항이 있으면 제출해 주세요.

답변1

해당 배열의 올바른 위치에 파일 이름을 추가하면 됩니다.

#!/bin/bash
files=('A.py' 'B.py' 'C.py' 'D.py')
files_err=()
files_ok=()
for f in "${files[@]}"; do
   if [[ -e "$f" ]]; then
        echo "$f file exists (no override)"
        files_err+=("$f")
   else
        if cp -n ~/Documents/library/normal.py "$f"; then
            files_ok+=("$f")
        else
            # copy failed, cp should have printed an error message
            files_err+=("$f")
        fi
   fi
done

(나는 filenames그것을 for에서 루프 변수로 사용하지 않을 것입니다. 그것은 단지 파일 이름(한 번)일 뿐이지 많지는 않습니다.)

관련 정보