![두 디렉토리에서 이름은 같지만 줄 수가 다른 파일을 찾는 방법은 무엇입니까?](https://linux55.com/image/93825/%EB%91%90%20%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EC%97%90%EC%84%9C%20%EC%9D%B4%EB%A6%84%EC%9D%80%20%EA%B0%99%EC%A7%80%EB%A7%8C%20%EC%A4%84%20%EC%88%98%EA%B0%80%20%EB%8B%A4%EB%A5%B8%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%B0%BE%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
sub1
다음 파일이 포함된 디렉터리가 있습니다.
$ wc -l *
5 file1.csv
5 file3.csv
1 file4.csv
에는 sub2
다음이 있습니다.
$ wc -l *
5 file1.csv
5 file2.csv
1 file3.csv
5 file4.csv
1 file5.csv
첫 번째 디렉터리에는 줄이 추가된 파일이 있을 수 있으며, 그런 다음 해당 파일은 두 번째 디렉터리로 이동합니다. 이 예에서는 file3
.sub2
차이점이 있는 파일 목록을 얻는 방법은 무엇입니까?
diff
나는 and로 몇 가지 테스트를 했지만 grep
디렉토리에 다른 파일이 있기 때문에 작동하지 않습니다(따라서 줄이 다릅니다).
~/dir1/$ wc -l >> wc.luis
~/dir1/$ wc -l * | awk '{ gsub(/\/home.*dir1\//,""); print $0 }'
| diff --side-by-side wc.luis -
| grep \|
이상적으로는 다음과 같은 목록을 얻습니다.
5 file3.csv | 1 file3.csv
1 file4.csv | 5 file4.csv
도움을 주시면 감사하겠습니다!
노트:
변경사항과 상관없이 모든 파일이 업데이트되었기 때문에 날짜를 확인할 수 없습니다.
때로는 최신 파일부족선이 몇 개 있어서 더 큰 선으로는 도저히 갈 수가 없어요.
답변1
다음은 예제 출력이 포함된 빠르고 더러운 셸 "한 줄짜리"입니다.
$ join -j2 <(cd sub1; wc -l *) <(cd sub2; wc -l *) | awk '$2!=$3'
file3.csv 5 1
file4.csv 1 5
total 11 17
이 total
줄은 의 출력 결과입니다 wc
. 다른 필터를 사용하여 제거할 수 있습니다.
$ join -j2 <(cd sub1; wc -l *) <(cd sub2; wc -l *) | awk '$2!=$3' | head -n-1
file3.csv 5 1
file4.csv 1 5
설명하다:
join
공통 열을 기준으로 두 개의 파일이 결합됩니다. 이 예에서는 -j2
두 번째 열( )을 기준으로 조인합니다. wc
출력의 두 번째 열은 파일 이름입니다. 이렇게 하면 두 디렉터리에 공통된 파일만 인쇄됩니다.
전화 시간 wc
은 다음과 같습니다.프로세스 교체작업 디렉터리가 sub1
왼쪽과 오른쪽 으로 변경되므로 sub2
디렉터리 이름 없이 파일 이름이 인쇄됩니다. 이 방법으로 join
공통 파일을 찾을 수 있습니다.
이 awk
명령은 두 번째 열과 세 번째 열의 값을 비교하여 값이 다른 경우에만 행을 인쇄합니다. 이렇게 하면 동일한 줄 수의 파일이 필터링됩니다.
head -n-1
모든 줄을 인쇄하지만 마지막 줄은 인쇄하지 않습니다. total
그러면 마지막 행이 필터링 됩니다 wc
.