ディレクトリとサブディレクトリのすべてのファイルの表示形式を指定します。

ディレクトリとサブディレクトリのすべてのファイルの表示形式を指定します。

サイズが30000〜50000バイトのディレクトリとサブディレクトリのすべてのファイルを表示したいです。

私のファイルを次のように表示したいと思います。

file1.xxx     md5sum     bytesize
file2.xxx     md5sum     bytesize

これはこれまでのコードです(コマンドでなければなりません)。

find /mnt/analysis -size +30000c -size -50000c -exec md5sum {} \; -exec ls -l {} \; | awk '{print $1 $5 $9}'

出力:

2fc863d4e42fcced35ce17cdbb9cb623
-rwxrwxrwx33673/mnt/analysis/bla/twelve.png
a952105e64609de5149db2da08e3256c
-rwxrwxrwx41412/mnt/analysis/bla/thirteen.png

希望の出力:

/mnt/analysis/bla/twelve.png 2fc863d4e42fcced35ce17cdbb9cb623 33673

/mnt/analysis/bla/thirteen.png a952105e64609de5149db2da08e3256c 41412

問題は、awkが両方のexecファイルで実行されることです。したがって、権限もそこに適用されます。

答え1

まずmd5sumを受け取ることができますか?

find /mnt/analysis -size +30000c -size -50000c -type f | xargs stat -c"echo \$(md5sum %n) %s" | sh

またはマイナス記号がある場合

find /mnt/analysis -size +30000c -size -50000c -type f | xargs stat -c"echo %n \$(md5sum <%n) %s" | sh 

tr -d -(もちろん、ファイル名がなければ追加して削除できます)

答え2

必要な方法でフォーマットを再指定するには、コードを「find shell」で囲みます。これは、3つのパラメータを使用する単一の「printf」コマンドにまとめられています。

  1. ファイル名
  2. ファイルの md5sum
  3. ファイルサイズ

このfindコマンドは、一致する各ファイル名を "find shell"に引数()として渡すため、$1各printf引数が実行する操作は次のとおりです。

find /mnt/analysis -size +30000c -size -50000c -type f -exec \
  sh -c 'printf "%s %s %d\n" \
         "$1" \
         "$(md5sum "$1" | awk "{print \$1}")" \
         "$(stat -c %s "$1")"' find-sh {} \;

md5sum(およびサイズを取得する呼び出し)から意味のある結果を得る-type fために、元のfindコマンドに制限を追加しました。stat読みやすくするために「シェルを検索」コマンドを複数行に分割しましたが、1行(長い)に縮小することもできます。追加のプロットがありますただmd5sumコマンドのmd5sum要素は、「find shell」全体が一重引用符で囲まれているため、awkスクリプトに二重引用符を使用しました。これは$awkが。$1/some/file/here

答え3

find++wcツールと組み合わせるcut

find /mnt/analysis -type f -size +30000c -size -50000c -exec \
bash -c 's=$(wc -c < "$1"); echo "$1 $(md5sum < "$1" | cut -d" " -f1) $s"' _ '{}' \;

関連情報