bash 쉘의 for 루프에 2개의 변수를 지정하는 방법은 무엇입니까?

bash 쉘의 for 루프에 2개의 변수를 지정하는 방법은 무엇입니까?

한 폴더에 여러 개의 이미지 파일이 있고 각 파일에 대한 폴더를 만들었습니다. 이제 cp각 폴더에 하나의 파일이 필요합니다 .

나는 사용했다

for i in `seq 1 9`; do mkdir $i; done

그런 다음 모든 파일을 폴더에 복사하십시오. 나는 사용하려고

for s in Whats* && i in `seq 1 9`;do cp $s $i;done
for s in *; do for i in `seq 1 9`;do mkdir $i;done;cp $s $i;done

이것은 분명히 작동하지 않습니다. (모든 파일 이름은 WhatsApp으로 시작합니다)

각 폴더에 한 번에 하나씩 파일을 복사하는 방법은 무엇입니까?

답변1

./WhatsApp*정수 이름을 가진 디렉터리를 원하고 각 파일에 패턴과 일치하는 디렉터리가 있기를 원한다고 가정해 보겠습니다 .

shopt -s nullglob

counter=0
for name in ./WhatsApp*; do
    counter=$(( counter + 1 ))
    mkdir "$counter" && cp "$name" "$counter"
done

이는 일치하는 각 이름에 대한 디렉터리를 생성하려고 시도하고 성공하면 파일을 해당 새 디렉터리에 복사합니다. mkdir디렉터리가 이미 존재하거나 현재 디렉터리에 쓰기 및 실행 권한이 없으면 호출이 실패합니다.

nullglob주어진 패턴과 일치하는 이름이 없을 때 루프의 단일 반복 실행을 피하기 위해 루프 앞에 쉘 옵션을 설정했습니다 . 설정이 없으면 nullglob루프가 한 번 실행되고 $name설정이 리터럴 문자열로 설정됩니다 ./WhatsApp*.

관련 정보