9

Web サイトを構築していて、画像のファイル名をハッシュしたいと考えています。

ディレクトリ内のすべてのファイルの名前を古いファイル名の sha1 に変更する bash スクリプト ファイルを作成するにはどうすればよいですか?

私はもう試した :

#!/bin/bash
for file in *
do
  if [ -f "$file" ];then
    newfile="openssl sha1 $file"
    mv "$file" $newfile"
  fi
done

しかし、それはうまくいきません:(

編集

ここでの提案に基づいて、私はこれを試しました:

#!/bin/bash
for file in old_names/*
do
  if [ -f "$file" ];then
    newfile=$(openssl sha1 $file | awk '{print $2}')
    cp $file new_names/$newfile.png
  fi
done

これによりファイルの名前が変更されますが、ファイル名のハッシュに何が使用されたかはわかりません。エクステンションはハッシュされましたか? パスをしましたか?

情報

次に、PHP の sha1() 関数を使用して画像を表示します。

echo "<img src=\"images/".sha1("$nbra-$nbrb-".SECRET_KEY).".png\" />\n";
4

4 に答える 4

7

これまでの回答と編集のコード例は、ファイルの内容をハッシュします。パスや拡張子を含まない、以前のファイル名のハッシュであるファイル名を作成する場合は、次のようにします。

#!/bin/bash
for file in old_names/*
do
    if [ -f "$file" ]
    then
        base=${file##*/}
        noext=${base%.*}
        newfile=$(printf '%s' "$noext" | openssl sha1)
        cp "$file" "new_names/$newfile.png"
    fi
done
于 2011-02-18T15:09:26.827 に答える
2

これを試して:

newfile=$(openssl sha1 $file | awk '{print $2}')
mv $file $newfile
于 2011-02-18T14:01:51.530 に答える
1

私は同じようなことをしようとしていましたが、ここのスニペットは/正確に/私が必要としていたものではありませんでした.さらに、私はスクリプトをbashするのが初めてです...申し訳ありません...最終的に、スクリプトにいくつかのアイデアをまとめました.それは私が必要とすることです - ./pics 内のファイルを見て、現在の拡張子を維持しながら古いハッシュに名前を変更します。これをさまざまな写真でテストしましたが、これまでのところ意図したとおりに機能します。私のような別の初心者がこれをコピーして貼り付けることができ、最終結果がたまたま私のものと同じである場合は、うまくいくと思います. 助けてくれてありがとう!

#!/bin/bash
for file in ./pics/*
  do
    newfile=$(openssl sha1 $file | awk '{print $2}')
    ext=${file##*.}
    mv "$file" "./pics/$newfile"."$ext"
  done
于 2011-08-24T03:55:39.030 に答える
0

試す

newfile=$(openssl sha1 $file)    
mv "$file" "${newfile##*= }"
于 2011-02-18T14:00:48.763 に答える