특정 확장에 대해 두 디렉터리를 비교한 다음 누락된 디렉터리를 새 디렉터리로 이동합니다.

특정 확장에 대해 두 디렉터리를 비교한 다음 누락된 디렉터리를 새 디렉터리로 이동합니다.

더 명확하게 표현하기 위해 말을 편집하고 변경합니다. dirA와 dirB 모두에 .dm4 파일이 있습니다. 내 참조 폴더는 dirA이고 dirB에 있는 dirA에 없는 모든 .dm4 파일을 나열한 다음 누락된 모든 .dm4 파일을 dir A의 기존 .dm4 파일과 함께 디렉터리 C에 게시하여 확인하고 싶습니다. 내 dirA 및 dirB에 존재할 수 있는 .dm4 파일을 놓치지 마세요.

답변1

몇 가지 가정을 해보자:

  • 당신의 껍질은bash
  • 당신의디렉토리 A~이다dirA
  • 당신의디렉토리 B~이다dirB
  • 당신의디렉토리 C아직 존재하지 않지만 이름이 지정될 예정입니다.dirC
  • 관심 있는 모든 파일은 해당 디렉터리에 있거나 dirA해당 dirB디렉터리에 중복되어 있을 수 있습니다.

내가 생각할 수 있는 가장 간단한 방법은 다음과 같습니다.

rm -rf dirC; mkdir dirC
cp -p dirB/*.dm4 dirC/
cp -p dirA/*.dm4 dirC/
diff <(ls dirA) <(ls dirB)

그러면 모든 .dm4 파일이 두 디렉터리에 저장 dirC되고 목록이 생성됩니다 .diff

그보다 더 높은 수준의 세부정보가 필요한 경우질문을 수정하세요더 구체적으로 말하면.

업데이트:

다음 파일이 있다고 가정합니다.

$ ls -1 dir{A,B}/*
dirA/apple.dm4
dirA/banana.dm4
dirA/date.dm4
dirA/fig.dm4
dirB/apple.dm4
dirB/elderberry.dm4
dirB/fig.dm4
dirB/grape.dm4
dirB/huckleberry.dm4

일부 파일은 중복되고 일부는 에만 있고 dirA일부는 에만 있습니다 dirB. 어느 디렉토리에도 cherry.dm4파일이 없습니다.

또한 foo.sh 스크립트가 있다고 가정해 보겠습니다.

$ cat << EOF > foo.sh; chmod 755 foo.sh
#!/usr/bin/env bash
rm -rf dirC; mkdir dirC
cp -p dirB/*.dm4 dirC/
cp -p dirA/*.dm4 dirC/
diff <(ls dirA) <(ls dirB)
EOF

실행하면 foo.sh다음이 생성됩니다.

$ ./foo.sh
2,3c2
< banana.dm4
< date.dm4
---
> elderberry.dm4
4a4,5
> grape.dm4
> huckleberry.dm4
$ ls -1 dirC/*
dirC/apple.dm4
dirC/banana.dm4
dirC/date.dm4
dirC/elderberry.dm4
dirC/fig.dm4
dirC/grape.dm4
dirC/huckleberry.dm4

출력 에서는 누락된 .dm4 파일이 , 및 임을 diff알려줍니다 . 에서 발견된 모든 파일은dirAelderberrygrapehuckleberrydirA 또는 dirB에 있습니다 dirC.

답변2

dirA의 모든 파일을 dirC에 복사합니다.

cp dirA/*.dm4 dirC

그런 다음 dirB의 모든 파일을 복사하고 dirC의 기존 파일은 건너뜁니다.

cp -n dirB/*.dm4 dirC/

매뉴얼 페이지 cp:

  -n, --no-clobber
         do not overwrite an existing file (overrides a previous -i
          option)

참고: -n파일 이름만 확인합니다. 버전을 확인하려면 -update 옵션이 흥미로울 수 있습니다.

관련 정보