Sortir file sesuai abjad sebelum diproses

12

Saya menggunakan perintah

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

untuk hash setiap file dalam hierarki folder. Sayangnya, sha256sumtidak mendapatkan nama file dari findabjad. Bagaimana ini bisa diperbaiki?

Saya ingin mereka memesan sebelum mereka hash sehingga mereka hash dalam urutan abjad (ini memiliki alasan).

UTF-8
sumber
Temukan file, pipa untuk sortmengurutkan daftar, dan pipa ke sha256sum
Sergiy Kolodyazhnyy
Sortir alfanumerik.
UTF-8
Sudah dijawab di unix.stackexchange.com/questions/34325/… .
sampablokuper

Jawaban:

16

Menggunakan beberapa pipa dan sort

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

Penjelasan

Dari 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.

Dari man sort

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

Dari 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.

Contoh

% 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

Nilai dalam kolom pertama sama, karena file tidak memiliki konten apa pun dalam pengujian saya.

AB
sumber
1
Oh ya! Null mengakhiri bukan baris baru
user3591723
1

Anda harus dapat menyalurkan output Anda dari findke sort.

pengguna3591723
sumber
Ya, tapi kemudian tidak ada -execsaklar.
UTF-8
2
Saya tidak percaya findmemiliki cara untuk mengabjadkan output, tetapi perpipaan ke sortdan kemudian menggunakan xargsakan memberikan output yang diharapkan. find . -type f | sort | xargs sha256sum. Meskipun itu akan memiliki masalah dengan subdirektori ..
user3591723
Cara hacky untuk berurusan dengan sub direktori adalahfind . -type f | awk -F/ '{print $NF, $0}' | sort | awk '{print $2}' | xargs sha256sum
user3591723
Ini mencetak kesalahan 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
Dugaan saya adalah salah satu file Anda memiliki kutipan tunggal dalam nama
user3591723