処理する前にファイルをアルファベット順にソートします


12

コマンドを使用します

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

フォルダ階層内のすべてのファイルをハッシュします。残念ながら、アルファベット順でsha256sumファイル名を取得できませんfind。これをどのように修正できますか?

ハッシュ化されるにそれらを順序付けして、アルファベット順にハッシュ化されるようにしたいと思います(これには理由があります)。


ファイルを検索し、パイプを使用sortしてリストを並べ替え、sha256sumにパイプで接続します
Sergiy Kolodyazhnyy

英数字ソート。
UTF-8

回答:


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

私の推測では、ファイルの1つに名前の単一引用符があります
user3591723
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.