Linux bash에서 한 디렉토리의 파일이 다른 디렉토리에 재귀적으로 존재하고 인쇄가 존재하는지 여부를 찾습니다.

Linux bash에서 한 디렉토리의 파일이 다른 디렉토리에 재귀적으로 존재하고 인쇄가 존재하는지 여부를 찾습니다.

Linux bash에서 한 디렉토리의 파일이 다른 디렉토리에 재귀적으로 존재하고 인쇄가 존재하는지 여부를 찾습니다.

당신이 가지고 있다고 말하자

  • pth1/dirA/file1 pth1/dirA/DirB/file2 그리고
  • pth2/dirA/file1 pth2/dirA/DirB/file3

나는 그 보고서를 원한다

file1 exists 
files2 dont exist in pth2
files3 dont exist in pth1

두 디렉터리 모두에 대해 현재 수준에서 작동하는 코드를 찾았지만 재귀적으로 작동하도록 만들 수는 없습니다.여기에서 가져온

pth1="/mntA/newpics";
pth2="/mntB/oldpics";
for file in "${pth1}"/*; do
    if [[ -f "${pth2}/${file##*/}" ]]; then
       echo "$file exists";
    fi
done

두 경로 모두에서 재귀적으로 작업하려면 어떻게 해야 합니까?

답변1

다른 방법으로 했어요. 하나의 디렉토리에서 모든 파일을 찾고 해당 경로를 제거한 다음 결과를 두 개의 다른 파일에 저장하고 이를 meld 또는 다른 프로그램과 비교할 수 있거나 찾은 내용을 meld와 직접 비교할 수 있습니다.

파일을 정렬하고 고유한 파일만 선택하며 결과에서 중복되지는 않습니다. 또한 파일 이름이 "jpg" 확장자로 끝나는 파일에만 관심이 있습니다.

pth1="/mnt/oldfiles";
pth2="/mnt/newfiles";

그런 다음

(find "${pth1}"/ -exec basename {} \; | grep "jpg$" | sort | uniq )  > a.txt;
(find "${pth2}"/ -exec basename {} \; | grep "jpg$" | sort | uniq )  > b.txt;
meld a.txt b.txt

또는 직접

meld <(find "${pth1}"/ -exec basename {} \; | grep "jpg$" | sort | uniq )  <(find "${pth2}"/ -exec basename {} \; | grep "jpg$" | sort | uniq )

업데이트: 한 디렉터리가 다른 디렉터리보다 훨씬 크면 직접 명령이 작동하지 않습니다(두 명령이 모두 완료되지 않고 MILD가 열립니다).

답변2

당신이 원하는 것이 무엇인지는 명확하지 않지만 이것이 효과가 있을 것이라고 생각합니다. 이 명령은 아래의 모든 파일을 /path/1아래의 파일과 비교하여 /path/2존재 여부와 동등성을 확인합니다.

diff --brief --recursive /path/1 /path/2

실제 사례

# Create some files
mkdir -p 1/{x,y} 2/{x,z}
touch 1/{x,y}/file1
date | tee 2/x/file1 >2/z/date

# Show what we have
tree 1 2
1
├── x
│   └── file1
└── y
    └── file1
2
├── x
│   └── file1
└── z
    └── date
4 directories, 4 files

# Compare the two directory trees
diff --brief --recursive 1 2
Files 1/x/file1 and 2/x/file1 differ
Only in 1: y
Only in 2: z

관련 정보