bash 스크립트: 디렉토리 내의 한 폴더에서 다른 폴더로 복사하고 여러 디렉토리에 걸쳐 프로세스를 반복합니다.

bash 스크립트: 디렉토리 내의 한 폴더에서 다른 폴더로 복사하고 여러 디렉토리에 걸쳐 프로세스를 반복합니다.

저는 아직 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. 이는 처리될 수 있지만 원래 사양에는 없습니다.

관련 정보