İşleme koymadan önce dosyaları alfabetik olarak sıralayın


12

Komutunu kullanıyorum

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

klasör hiyerarşisindeki her dosyayı karmak için. Ne yazık ki, sha256sumdosya adlarını findalfabetik olarak almıyor . Bu nasıl düzeltilebilir?

Onları hashlenmeden önce sipariş ettirmek istiyorum, böylece alfabetik sırayla hashediliyorlar (bunun bir nedeni var).


Dosyaları bulmak, sortlisteyi sıralamak için boru ve sha256sum için boru
Sergiy Kolodyazhnyy

Alfasayısal sıralama.
UTF-8

Yanıtlar:


17

Bazı borular ve sort

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

açıklama

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

itibaren man sort

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

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

Misal

% 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

Dosyaların testimde herhangi bir içerik bulunmadığından, ilk sütundaki değerler aynıdır.


1
Ah evet!
Newline

1

Çıktınızı ile arasında findgeçiş yapabilmeniz gerekir sort.


Evet, ama sonra -execanahtar yok .
UTF-8

2
findÇıktıyı alfabetik olarak tanımlamanın hiçbir yolu olmadığına inanmıyorum , ancak sortdaha sonra kullanmak ve kullanmak için borular xargsbeklenen çıktıyı verecektir. find . -type f | sort | xargs sha256sum.
Alt

Alt dizinlerle baş etmek için find . -type f | awk -F/ '{print $NF, $0}' | sort | awk '{print $2}' | xargs sha256sum
haksızlık

Bu hatayı yazdırır 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

Benim tahminim dosyalarınızdan birinde tek bir alıntı var
user3591723
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.