ファイル名をハッシュの最初のN文字に変更する単一のコマンド

ファイル名をハッシュの最初のN文字に変更する単一のコマンド

私はmacOSモハービーを使用しています。

私は自分のサイトに画像を追加するときに画像名を付けるのが嫌いです(Jekyll、興味のある人のための情報)。代わりに、ファイルの内容に基づいてハッシュを生成し、ハッシュの最初のN文字をファイル名として使用するのが合理的な戦略だと思います。この戦略は、Amazon S3 および CloudFront を介してウェブサイトを提供する際の資産バージョン管理にも役立ちます。

はい

ファイルが与えられたら、somescreenshot.pngこのTBDコマンドを実行し、結果は名前が変更されたファイルです8dbm2hz1.png

進展

私はこれについて進歩しましたが、現在は多段階のアプローチです。

  1. ハッシュを作成し、最初の8文字を取得してクリップボードに送信します。
    shasum -a 256 -b inputfile.png | head -c8 | pbcopy
  2. ファイルの名前を変更します。
    mv inputfile.png [paste from #1]

このコマンドを効率的なパイプラインシングルステッププロセスとして作成する必要があります。

答え1

なぜ使用しないのですか:

mv -- inputfile.png "$(shasum -a 256 -b inputfile.png | head -c8)"

$(shasum -a 256 -b inputfile.png | head -c8)ファイルがハッシュ値の最初の8文字の出力に移動されます。

答え2

コマンド置換を使用して、ハッシュ値をシェル変数に保存します。

file=inputfile.png
h=$(shasum -a 256 -b "$file" | head -c8)

その後、名前を変更したり、端末に印刷したり、送信したり、他の操作を実行したりpbcopyできます。

mv -- "$file" "$h"
echo "$h" | pbcopy
echo "'$file' renamed to '$h'"

ファイル拡張子を保持するには、次のように使用します。

newname=$h.${file##*.}
mv -- "$file" "$newname"

${var##*.}最後のポイントまですべて削除してください。)

答え3

名前を変更したい場合みんなファイルを作成してxargsを使用してください。これはGNUツールの真言です。そのオプションが存在するかどうかを確認するには、マニュアルページを確認してください。

printf "%s\0" * |
    xargs -0 -I{} sh -c 'echo mv "$1" "$(shasum -a 256 -b "$1"| head -c8)"' sh {} 

これはヌルバイトを使用してファイル名を区別するため、スペースを含むファイル名を安全に処理できます。

echo実際にファイルを移動するには、コマンドを削除する必要があります。

関連情報