一部のパスにスペースがある場合は、再帰ファイルのリストからmd5ハッシュを生成する

一部のパスにスペースがある場合は、再帰ファイルのリストからmd5ハッシュを生成する

ホームディレクトリ内のすべてのディレクトリとファイルに対してmd5ハッシュを作成する必要があります。私が成功しない唯一の理由は、パスにスペースを含むファイルを解決する方法を見つけることです。

私は再帰リストを作成するためにfindを使用しています。 (私はfindがこれを行う最良の方法であることを読んでいます。)

c5-26-1# find /root/newdir
/root/newdir
/root/newdir/1
/root/newdir/2
/root/newdir/3
/root/newdir/4
/root/newdir/5
/root/newdir/newdir2
/root/newdir/newdir2/1
/root/newdir/newdir2/2
/root/newdir/new
/root/newdir/dir
/root/newdir/new dir

md5を使ってこれを試すと、2つの異なる結果が表示されます。どちらも機能しません。

c5-26-1# md5 $(find /root/newdir) # same outcome using for loop
MD5 (/root/newdir) = bc79a580f6c932937f6fcd454747db72
MD5 (/root/newdir/1) = 94ca98295946310ce88e185ea57486d5
MD5 (/root/newdir/2) = 8432051f64459be5a5e73dc2abd91795
MD5 (/root/newdir/3) = d41d8cd98f00b204e9800998ecf8427e
MD5 (/root/newdir/4) = d41d8cd98f00b204e9800998ecf8427e
MD5 (/root/newdir/5) = d41d8cd98f00b204e9800998ecf8427e
MD5 (/root/newdir/newdir2) = 722165901468b9596dbdddfe118759fb
MD5 (/root/newdir/newdir2/1) = d41d8cd98f00b204e9800998ecf8427e
MD5 (/root/newdir/newdir2/2) = d41d8cd98f00b204e9800998ecf8427e
MD5 (/root/newdir/new) = 89d042c5f9d6ba485a654b543685ea86
MD5 (/root/newdir/dir) = 148538718feba14839f5d1072854c5f4
MD5 (/root/newdir/new) = 89d042c5f9d6ba485a654b543685ea86
MD5 (dir) = 148538718feba14839f5d1072854c5f4

または

c5-26-1# find -X /root/newdir | xargs md5
find: /root/newdir/new dir: illegal path
MD5 (/root/newdir) = bc79a580f6c932937f6fcd454747db72
MD5 (/root/newdir/1) = 94ca98295946310ce88e185ea57486d5
MD5 (/root/newdir/2) = 8432051f64459be5a5e73dc2abd91795
MD5 (/root/newdir/3) = d41d8cd98f00b204e9800998ecf8427e
MD5 (/root/newdir/4) = d41d8cd98f00b204e9800998ecf8427e
MD5 (/root/newdir/5) = d41d8cd98f00b204e9800998ecf8427e
MD5 (/root/newdir/newdir2) = 722165901468b9596dbdddfe118759fb
MD5 (/root/newdir/newdir2/1) = d41d8cd98f00b204e9800998ecf8427e
MD5 (/root/newdir/newdir2/2) = d41d8cd98f00b204e9800998ecf8427e
MD5 (/root/newdir/new) = 89d042c5f9d6ba485a654b543685ea86
MD5 (/root/newdir/dir) = 148538718feba14839f5d1072854c5f4

空白のあるディレクトリをどのように解釈しますか?

答え1

xargs一般的なツールが生成しない非常に具体的な方法で入力が参照されると予想しているため、あまり役に立ちません。ご存知のように、mycommand $(find …)これは最初にすべてのファイル名を連結してからスペースに分割するので、これはお勧めできません。

参照する必要がある中間シェルなしで実行するには、-execmain ofを使用します。実装が合理的に最新の場合は、引数のバッチごとに一度だけプログラムを呼び出す周知のタスクを実行することができます。findmd5findxargsmd5

find /root/newdir -type f -exec md5 {} +

findサポートしていない-exec … {} +場合に+置き換えてください\;。これにより、各ファイルが順番に呼び出されますfindmd5少し遅いですが、どこでも使用できます。

答え2

なぜそれを使用しないのですか?md5深さこれがまさにこれを行うツールですか?ほとんどのLinuxディストリビューションでは、一般的にmd5deep

答え3

-execスイッチを使用するとfind自動的にエスケープ処理になりそうです。

関連情報