내 bash 스크립트에 어떤 문제가 있습니까?

미파

다음과 같이 가정하십시오 .

현재 디렉토리에 동일한 md5sum을 부여하는 중복 파일 이름을 한 줄에 나열

먼저 환경을 설치하십시오.

echo "hello" > file1; cp file1 file2; cp file2 file3;

쉘 스크립트 :

#!/bin/bash
#FileName: ls_duplicate.sh

## ls file in size-desc order and long listing format and long-iso timestyle
## -rw-rw-r-- 1 ubuntu ubuntu 6 2017-11-21 13:58 file1
## -rw-rw-r-- 1 ubuntu ubuntu 6 2017-11-21 13:58 file2
## -rw-rw-r-- 1 ubuntu ubuntu 5 2017-11-21 13:58 output
find -maxdepth 1 -type f -exec basename {} \; | xargs ls -lS --time-style=long-iso | awk 'BEGIN { 
getline;getline;
prev_name=$8; prev_size=$5;
}

{
cur_name=$8;
cur_size=$5;

if (prev_size==cur_size)
{
    "md5sum " prev_name | getline;
    prev_md5_sum=$1;

    "md5sum " cur_name | getline;
    cur_md5_sum=$1;

    # print(prev_name, prev_md5_sum, cur_name, cur_md5_sum);  # debug

    ##if the two file is same size and same md5sum, then print duplicate file-name
    if ( prev_md5_sum==cur_md5_sum ) { print prev_name; print cur_name;} 
}

prev_size=cur_size; prev_name=cur_name;
}' | sort -u

현재 디렉토리의 파일 :

file1 file2 file3 ls_duplicate.sh

스크립트 실행 :./ls_duplicate.sh

산출:

file1 b1946ac92492d2347c6235b4d2611184 file2 b1946ac92492d2347c6235b4d2611184
file2 -rw-rw-r-- file3 b1946ac92492d2347c6235b4d2611184

그래서 여기서 무슨 일이 일어나고 -rw-rw-r--있습니까?

해결책

글쎄, 나는 이것을 사용하는 대신 직접 해결합니다.

"md5sum " prev_name | getline;
prev_md5_sum=$1;
"md5sum " cur_name | getline;
cur_md5_sum=$1; 

대신 사용

"md5sum " prev_name | getline md5_sum;
split(md5_sum, arr, "  ");
prev_md5_sum=arr[1];

"md5sum " cur_name | getline md5_sum;
split(md5_sum, arr, "  ");
cur_md5_sum=arr[1];

참고 : 스크립트에서 변경해야합니다 (원래 스크립트 작동 하지 않음).

예술가

다음과 같이 보입니다.

  • 파일 목록을 얻다
  • 그런 다음 크기 등
  • 그런 다음 동일한 크기의 파일의 md5sum을 생성합니다.
  • 그 중 동일한 md5sum으로 인쇄하십시오.

awk 코드를 수정하려고하지 않을 것입니다. 대신 fdupes명령 의 기능을 복제하고 있다는 점에 유의하십시오 . 에서 맨 페이지 :

Searches  the  given  path for duplicate files. Such files are found by
comparing file sizes and MD5 signatures,  followed  by  a  byte-by-byte
comparison.

이를 위해 복잡한 스크립트를 작성하는 대신 사용하는 것이 좋습니다.

실패하면 크기 검사를 제거하면 중복 항목을 훨씬 쉽게 찾을 수 있습니다.

$ md5sum * | sort -k1,1 | uniq -w32 -D
b1946ac92492d2347c6235b4d2611184  file1
b1946ac92492d2347c6235b4d2611184  file2
b1946ac92492d2347c6235b4d2611184  file3

의 모든 해시 md5sums는 너비가 32 자이므로 uniq해당 32 자만 비교하고 발견 된 모든 중복을 인쇄 하도록 print에 지시 하기 쉽습니다 .

절대적으로 크기 검사가 필요하다면 다소 복잡해 지지만 여전히 스크립트보다 간단합니다. find파일 크기를 인쇄 할 수 있으므로 ls혼합 할 필요가 없습니다 .

find . -maxdepth 1 -type f -printf "%s/%P\n" | 
  awk -F/ '       # Use / as delimiter, it wont appear in filename
  s[$1]++ {       # if the file size has appeared before
    if (n[$1]) {  # if the first name hasnt been printed yet
      print n[$1] # print it and delete it
      n[$1] = "";
    }
    print $2;     # print filename with duplicated size
    next
  } {n[$1] = $2}  # save filename for each new size encountered'

이 awk 명령은 크기가 중복 된 모든 파일을 인쇄합니다.

이제 md5sum | sort | uniq앞서 언급 한 파이프 라인을 사용하십시오 .

find -maxdepth 1 -type f -printf "%s/%P\n" | 
  awk -F/ 's[$1]++ {if (n[$1]){print n[$1]} print $2; n[$1] = ""; next} {n[$1] = $2}' |
  xargs -d '\n' md5sum |
  sort -k1,1 |
  uniq -w32 -D

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

내 쉘 스크립트에 어떤 문제가 있습니까?

분류에서Dev

내 쉘 스크립트에 어떤 문제가 있습니까?

분류에서Dev

내 Powershell 스크립트에 어떤 문제가 있습니까?

분류에서Dev

내 bash 스크립트에 어떤 문제가 있습니까? var = (command1 | command2)?

분류에서Dev

이 Bash 스크립트 메뉴에 어떤 문제가 있습니까?

분류에서Dev

내 흐림 / 초점 스크립트에 어떤 문제가 있습니까?

분류에서Dev

내 자바 스크립트 코드에 어떤 문제가 있습니까?

분류에서Dev

내 스크립트에 어떤 문제가 있습니까? psd를 bmp로 내보내십시오.

분류에서Dev

내 bash 스크립트에 문제가 있습니다.

분류에서Dev

내 자바 스크립트 마우스 휠 애니메이션 코드에 어떤 문제가 있습니까?

분류에서Dev

내 배치 스크립트에서이 코드 줄에 어떤 문제가 있습니까?

분류에서Dev

내 HTML 및 자바 스크립트 코드에 어떤 문제가 있습니까?

분류에서Dev

내 웹 사이트의 스크롤바에 어떤 문제가 있습니까?

분류에서Dev

MATLAB : quatrotate 스크립트에 어떤 문제가 있습니까?

분류에서Dev

내 트리거에 어떤 문제가 있습니까? Oracle SQLPLUS

분류에서Dev

WHERE NOT EXISTS 내 UPDATE 문에 어떤 문제가 있습니까?

분류에서Dev

내 OpenSSH Include 지시문에 어떤 문제가 있습니까?

분류에서Dev

내 OpenSSH Include 지시문에 어떤 문제가 있습니까?

분류에서Dev

내 연결 문자열에 어떤 문제가 있습니까?

분류에서Dev

내 UPDATE 문에 어떤 문제가 있습니까?

분류에서Dev

내 if 문에 어떤 문제가 있습니까?

분류에서Dev

내 if else 문에 어떤 문제가 있습니까?

분류에서Dev

내 UPDATE 문에 어떤 문제가 있습니까?

분류에서Dev

내 시스템에 어떤 문제가 있습니까?

분류에서Dev

heredoc 내부 케이스에 문제가 있습니다. Bash 스크립트

분류에서Dev

내 Ubuntu Touch 앱에 어떤 문제가 있습니까?

분류에서Dev

내 SQL 명령에 어떤 문제가 있습니까?

분류에서Dev

내 SQL 명령에 어떤 문제가 있습니까?

분류에서Dev

내 Jade for 루프 코드에 어떤 문제가 있습니까?

Related 관련 기사

  1. 1

    내 쉘 스크립트에 어떤 문제가 있습니까?

  2. 2

    내 쉘 스크립트에 어떤 문제가 있습니까?

  3. 3

    내 Powershell 스크립트에 어떤 문제가 있습니까?

  4. 4

    내 bash 스크립트에 어떤 문제가 있습니까? var = (command1 | command2)?

  5. 5

    이 Bash 스크립트 메뉴에 어떤 문제가 있습니까?

  6. 6

    내 흐림 / 초점 스크립트에 어떤 문제가 있습니까?

  7. 7

    내 자바 스크립트 코드에 어떤 문제가 있습니까?

  8. 8

    내 스크립트에 어떤 문제가 있습니까? psd를 bmp로 내보내십시오.

  9. 9

    내 bash 스크립트에 문제가 있습니다.

  10. 10

    내 자바 스크립트 마우스 휠 애니메이션 코드에 어떤 문제가 있습니까?

  11. 11

    내 배치 스크립트에서이 코드 줄에 어떤 문제가 있습니까?

  12. 12

    내 HTML 및 자바 스크립트 코드에 어떤 문제가 있습니까?

  13. 13

    내 웹 사이트의 스크롤바에 어떤 문제가 있습니까?

  14. 14

    MATLAB : quatrotate 스크립트에 어떤 문제가 있습니까?

  15. 15

    내 트리거에 어떤 문제가 있습니까? Oracle SQLPLUS

  16. 16

    WHERE NOT EXISTS 내 UPDATE 문에 어떤 문제가 있습니까?

  17. 17

    내 OpenSSH Include 지시문에 어떤 문제가 있습니까?

  18. 18

    내 OpenSSH Include 지시문에 어떤 문제가 있습니까?

  19. 19

    내 연결 문자열에 어떤 문제가 있습니까?

  20. 20

    내 UPDATE 문에 어떤 문제가 있습니까?

  21. 21

    내 if 문에 어떤 문제가 있습니까?

  22. 22

    내 if else 문에 어떤 문제가 있습니까?

  23. 23

    내 UPDATE 문에 어떤 문제가 있습니까?

  24. 24

    내 시스템에 어떤 문제가 있습니까?

  25. 25

    heredoc 내부 케이스에 문제가 있습니다. Bash 스크립트

  26. 26

    내 Ubuntu Touch 앱에 어떤 문제가 있습니까?

  27. 27

    내 SQL 명령에 어떤 문제가 있습니까?

  28. 28

    내 SQL 명령에 어떤 문제가 있습니까?

  29. 29

    내 Jade for 루프 코드에 어떤 문제가 있습니까?

뜨겁다태그

보관