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에서 루프 변수로 사용하지 않을 것입니다. 그것은 단지 파일 이름(한 번)일 뿐이지 많지는 않습니다.)