처리하기 전에 파일을 사전 순으로 정렬


12

나는 명령을 사용

find . -type f -exec sha256sum {} \; > sha256SumOutput

폴더 계층 구조의 모든 파일을 해시합니다. 불행하게도, 알파벳 순서로 sha256sum파일 이름을 얻지 못합니다 find. 이 문제를 어떻게 해결할 수 있습니까?

알파벳 순서로 해시되도록 해시 되기 전에 주문하고 싶습니다 (이유가 있습니다).


파일 찾기, sort목록을 정렬 하기 위한 파이프 및 sha256sum을위한 파이프
Sergiy Kolodyazhnyy

영숫자 정렬.
UTF-8

unix.stackexchange.com/questions/34325/… 에서 이미 답변했습니다 .
sampablokuper

답변:


16

일부 파이프를 사용하여 sort

find . -type f -print0 | sort -z | xargs -r0 sha256sum > sha256SumOutput

설명

에서 man find

   -print0
        True; print the full file name on the standard output, followed
        by a null character (instead of the newline character that -print
        uses). This allows file names that contain newlines or other
        types of white space to be  correctly  interpreted by programs
        that process the find output.  This option corresponds to the -0
        option of xargs.

에서 man sort

   -z, --zero-terminated
        line delimiter is NUL, not newline

에서 man xargs

   -0   
        Input items are terminated by a null character instead of by
        whitespace, and the quotes and backslash are not special (every
        character is taken literally).  Disables the end of file string,
        which is treated like any  other  argument. Useful when input
        items might contain white space, quote marks, or backslashes.
        The GNU find -print0 option produces input suitable for this mode.

% ls -laog
total 4288
drwxrwxr-x  2 4329472 Aug 17 08:20 .
drwx------ 57   20480 Aug 17 08:20 ..
-rw-rw-r--  1       0 Aug 17 08:15 a
-rw-rw-r--  1       0 Aug 17 08:15 a b
-rw-rw-r--  1       0 Aug 17 08:15 b
-rw-rw-r--  1       0 Aug 17 08:15 c

% find -type f -print0 | sort -z | xargs -r0 sha256sum                  
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  ./a
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  ./a b
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  ./b
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  ./c

첫 번째 열의 값은 파일에 테스트 내용이 있으므로 동일합니다.


1
오 예! 줄 바꿈 대신 널 종료
user3591723

1

출력을에서 find로 파이프 할 수 있어야합니다 sort.


예, 그러나 -exec스위치 는 없습니다 .
UTF-8

2
find출력을 알파벳순으로 정렬 할 수있는 방법 이 없다고 생각 하지만 파이핑 sort한 다음 사용 xargs하면 예상 출력이 나옵니다. find . -type f | sort | xargs sha256sum. 하위 디렉토리에 문제가있을 수 있습니다.
user3591723

서브 디렉토리를 다루는 해키 방법이 될 것이다find . -type f | awk -F/ '{print $NF, $0}' | sort | awk '{print $2}' | xargs sha256sum
user3591723

오류가 인쇄 xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option sha256sum: invalid option -- 'l' Try 'sha256sum --help' for more information.됩니다.
UTF-8

내 생각 엔 파일 중 하나에 작은 따옴표가 있습니다
user3591723
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.