서로 다른 디렉터리 이름 사이에 명령 적용

서로 다른 디렉터리 이름 사이에 명령 적용

path1에 A, B, C 디렉터리를 저장하고 path2에 A_1, A_2, A_3, B_1, B_2, B_3, C_1, C_2, C_3 디렉터리를 저장했습니다.

경로 1의 A, B, C 디렉터리에 동일한 "file.txt"의 복사본을 저장했습니다.

path2의 모든 디렉토리에 "file.txt"의 복사본을 만들고 싶습니다. 나는 다음과 같이 for 루프를 시도했습니다.

#!/bin/bash
path1=path to directories A, B, C
path2=path to directories A_1, A_2, A_3, B_1, B_2, B_3, C_1, C_2, C_3
for i in $(cat dirname.txt); do #dirname.txt is a file located in path1 contain the directories names in path1 (i.e A, B, C)
cp $path1/${i}/file.txt $path2/${i}_*/
done

이전 코드는 path2의 디렉터리를 읽을 수 없습니다.

내가 뭘 잘못했나요?

답변1

CP여러 소스를 가져올 수 있지만 여러 대상을 가져올 수는 없습니다. 확장을 통해 대상 디렉토리를 얻으려면 "path2/${i}_"*/두 번째 루프가 필요합니다 for.

for i in A B C; do
   for j in "path2/${i}_"*/; do
      cp "$path1/$i/file.txt" "$j"
   done 
done

또는 대상 디렉터리 이름을 직접 생성할 수 있습니다.

for i in A B C; do
   for j in "path2/${i}_"{1..3}/; do
      cp "$path1/$i/file.txt" "$j"
   done 
done

특별한 이유가 없는 한 기본적으로 쉘 변수 확장을 큰따옴표로 묶어야 한다는 점을 잊지 마십시오.

관련 정보