두 디스크 구조 사이에서 누락된 디렉터리를 찾는 방법은 무엇입니까?
- 디스크 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
그러면 디렉토리가 알파벳 순서로 반복적으로 나열되고 이 목록이 와 비교됩니다.dir2
diff
답변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
스크립트에서 해당 디렉터리를 제거하세요.