두 디렉토리에서 이름은 같지만 줄 수가 다른 파일을 찾는 방법은 무엇입니까?

두 디렉토리에서 이름은 같지만 줄 수가 다른 파일을 찾는 방법은 무엇입니까?

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.

관련 정보