다른 디렉토리 이름 사이에 명령 적용

다른 디렉토리 이름 사이에 명령 적용

path1에 A, B, C 디렉터리가 저장되어 있고 A_1, A_2, A_3, B_1, B_2, B_3, C_1, C_2, C_3 디렉터리가 path2에 저장되어 있습니다.

path1의 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

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

관련 정보