저는 아직 bash 스크립팅 초보자입니다. 여러 디렉터리를 실행하기 위해 복사 명령을 반복하려고 합니다. P1, P2, P3,..P60 디렉토리 세트가 있습니다. 각 디렉터리에는 "A", "M", "out" 세 개의 폴더가 있습니다. A 및 M 폴더에서 파일을 복사하여 "out" 폴더에 붙여넣고 싶습니다. 그런 다음 60개 디렉터리 모두에 대해 이 작업을 반복합니다.
"AL"에는 PIL_CBR.nii라는 파일이 있고 "M"에는 PIL_MO.nii라는 파일이 있습니다.
감사합니다!
답변1
P1, P2, ..., P60 디렉터리가 동일한 폴더에 있다고 가정합니다. 그렇다면 당신은 단지폴더의 모든 디렉터리를 반복합니다.그리고 실행하십시오 cp
. 이 폴더에서 다음 스크립트를 실행하세요.
for d in P*/ ; do
echo "$d"
cp $d/A/* $d/M/* $d/out/
done
여기서 *가 현재 디렉터리의 파일 및 디렉터리 이름으로 확장된다는 것을 알 수 있습니다.
답변2
디렉터리 이름이 말한 그대로 정확하게 지정되고 현재 디렉터리에 있으며 디렉터리당 수천 개의 파일을 포함하지 않는다고 가정하면 다음과 같이 작동합니다.
for dir in P{1..60}/{A,M} ; do
[ -d "$P" ] || continue
cp "$dir"/* "${dir%[AM]}out/"
done
와일드카드를 사용하여 *
디렉터리를 선택할 수는 있지만 예상하지 못한 내용을 일치시키고 변경할 위험이 있습니다.
이는 설명하는 항목의 정확한 집합과만 일치해야 하지만 설명하는 상황에 매우 구체적이므로 다른 입력에 맞게 방법을 수정해야 할 수도 있습니다.
두 디렉토리의 파일 이름이 충돌하는 경우 from의 내용이 M
대체됩니다 A
. 이는 처리될 수 있지만 원래 사양에는 없습니다.