두 디렉터리의 확장을 비교하고 누락된 확장을 새 디렉터리로 이동합니다.

두 디렉터리의 확장을 비교하고 누락된 확장을 새 디렉터리로 이동합니다.

좀 더 명확하게 설명하기 위해 문구를 편집하고 변경했습니다. dirA와 dirB 모두에 .dm4 파일이 있습니다. 내 참조 폴더는 dirA이고 dirB에 있는 dirA의 누락된 .dm4 파일을 모두 나열한 다음 디렉터리 A의 기존 .dm4와 함께 누락된 모든 .dm4 파일을 디렉터리 C에 게시하려고 합니다. 내 dirA 및 dirB에 있을 수 있는 .dm4를 놓치지 마세요.

답변1

몇 가지 가정을 해보자:

  • 너의 껍질은bash
  • 당신의카탈로그 AdirA
  • 당신의카탈로그 BdirB
  • 당신의디렉토리 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 옵션이 흥미로울 수 있습니다.

관련 정보