두 디스크 구조 사이에서 누락된 디렉터리를 찾는 방법은 무엇입니까?

두 디스크 구조 사이에서 누락된 디렉터리를 찾는 방법은 무엇입니까?

두 디스크 구조 사이에서 누락된 디렉터리를 찾는 방법은 무엇입니까?

  • 디스크 A에 dir A/, B/, C/, 이 있다고 가정합니다 D/. (최신 사본)
  • 디스크 B에 dir A/, B/, D/, 이 있다고 가정합니다 E/. (오래된 사본)

이전 복사본과 비교하여 새 복사본에서 누락된 디렉터리를 확인하고 싶습니다.

결과: "Dir E".

어떻게 해야 하나요? 나는 그 파일에 대한 어떠한 보고도 원하지 않습니다.

이는 특정 대상에서 누락된 디렉터리만 생성할 수 있습니다.

find -type d -exec mkdir -p "/mnt/pics/Albums/{}" \; 

업데이트: 내 질문에 제안된 기사는 폴더가 아닌 콘텐츠에 관한 것입니다. 게다가 "diff -rq path1 path2"에 대한 답변으로 명확한 해결책이 제안되지 않았습니다.

답변1

diff디렉터리 내용을 비교할 수 있습니다. 하위 디렉터리를 재귀적 으로 -r순회하고 -q차이점만 보고하는 경우:

diff -rq /path/to/dir1 /path/to/dir2

예를 들어:

$mkdir A B
$touch A/1 A/2 A/3 B/1 B/3 B/4
$diff -rq A B
Only in A: 2
Only in B: 4

이는 파일의 동일한 내용도 비교한다는 점에 유의하세요!

답변2

상당히 편리한 그래픽 도구는 meld많은 Linux 배포판의 저장소에서 찾을 수 있습니다.

아래와 같이 비교할 디렉터리 경로를 제공하면 됩니다.

meld dir1/ dir2/

어떤 파일/디렉토리가 경로 중 하나에만 존재하는지, 그리고 파일이 두 경로 모두에 존재하는 경우 두 경로 중 어느 경로가 더 최근의 타임스탬프를 가지고 있는지를 나타내는 분할 트리 보기가 표시됩니다.

답변3

Pass 다음을 bash사용할 수 있습니다.

diff <(cd dir1 && find -type d) <(cd dir2 && find -type d)

dir1그러면 디렉토리가 알파벳 순서로 반복적으로 나열되고 이 목록이 와 비교됩니다.dir2diff

답변4

다음 셸 스크립트는 이전 디렉터리와 새 디렉터리라는 두 가지 매개 변수를 사용합니다. 첫 번째 인수에 존재하는 디렉터리와 두 번째 인수에 존재하지 않는 디렉터리만 나열됩니다. 그러나 다른 솔루션보다 조금 더 장황합니다.

#!/bin/bash
source_dir=$1
target_dir=$2

for folder_plus_path in $( find $source_dir -mindepth 1 -maxdepth 1 -type d ); do
  folder=${folder_plus_path#${source_dir}/}
  if [[ ! -d ${target_dir}/${folder} ]]; then
    echo ${folder}
  fi
done

현재로서는 누락된 디렉토리만 위에 나열됩니다.첫 번째 매개변수에 포함되어 있습니다(따라서 A/E가 없음을 강조하지만 B/A/Subdir도 A/A/Subdir로 존재하는지 확인하지 않습니다). 이러한 하위 디렉터리도 확인하려면 -maxdepth 1 스크립트에서 해당 디렉터리를 제거하세요.

관련 정보