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