한 디렉토리에서 다른 디렉토리가 아닌 파일 찾기


12

한 디렉토리에있는 모든 파일을 다른 디렉토리에없는 Linux / Unix 도구가 있습니까? 기본적으로 나는 ls의 출력에서 ​​작동하는 diff를 찾고 있습니다.

짧고 달콤한 스크립트도 좋습니다.

답변:


20

diff 이미 수행하고 있습니다 :

diff dir1 dir2

출력 예 :

Only in dir1: some_file.txt
Only in dir1: some_other_file.txt
Only in dir2: third_file.txt

5
이거 좋다 하나의 그립 : diff는 실제로 두 파일에있는 각 파일에서 실행됩니다. 파일 이름에 대해서만 실행하는 모호한 옵션이 있습니까? 그렇지 않으면, 내가 제안diff dir1 dir2 | grep "Only"
윌리 Ballenthin

날 많은 bash는 스크립트 감사의 분 저장이 와우
user5359531


4

사람들이 여기에서 말했듯이 DIFF는 다양한 사용법으로 사용할 수 있습니다. 또는 dirdiff대신에 사용하십시오 . :-)

그러나 일부 디렉토리를 동기화 상태로 유지하려면 실제로 살펴보아야합니다 rsync.

문안 인사


3

모든 하위 디렉토리를 통해이 작업을 수행하려는 경우 좋은 방법은 다음과 같습니다.

diff --brief -r dir1/ dir2/

나는 간략하게 사용하는 것을 선호하지만 원한다면 그것을 생략 할 수 있습니다.


1

for i in $(ls -1 directory1); do if (test -f directory2/$i) then echo $i; fi; done


0

작동합니다 ..

ls -a1 /dir1 | sort > /tmp/1
ls -a1 /dir2 | sort > /tmp/2
diff /tmp/1 /tmp/2

0

테스트되지 않은 :

find /dir/A -printf "%P" | while read f; do
  if [ ! -e "/dir/B/$f" ]; then
    echo $f
  fi
done

0

데니스 윌리엄슨 (Dennis Williamson)은 좋은 답변 을 얻었지만 재귀 적으로해야했습니다. GNU findutils 4.7.0은 출력을 정렬하지 않으므로 여기에 내가 사용한 것이 있습니다.

diff <(cd $dir1; find | sort) <(cd $dir2; find | sort)

이 방법을 한 가지만 수행하고 파일 목록을 생성하려면 다음을 사용했습니다.

diff <(cd $dir1; find | sort) <(cd $dir2; find | sort) \
| grep '< ./' | sed "s,< ./,$dir1/,"

이것이 제대로 작동하려면 $ dir1이나 $ dir2에 슬래시를 포함해서는 안됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.