使用文件名的sha1()哈希重命名文件的脚本

Man*_*anu 8 bash rename file-rename

我正在建立一个网站,我想哈希我的图像的文件名.

如何创建一个bash脚本文件,使用旧文件名的sha1重命名目录中的每个文件?

我试过了 :

#!/bin/bash
for file in *
do
  if [ -f "$file" ];then
    newfile="openssl sha1 $file"
    mv "$file" $newfile"
  fi
done
Run Code Online (Sandbox Code Playgroud)

但那不起作用:(

编辑

根据这里的建议我尝试了这个:

#!/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
Run Code Online (Sandbox Code Playgroud)

这会重命名文件,但我不确定用于散列文件名的内容.扩展得到了解释吗?走了路?

信息

然后我将使用PHP的sha1()函数来显示图像:

echo "<img src=\"images/".sha1("$nbra-$nbrb-".SECRET_KEY).".png\" />\n";
Run Code Online (Sandbox Code Playgroud)

Pau*_*ce. 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
Run Code Online (Sandbox Code Playgroud)

  • 在新的ubuntu机器上,该脚本将文件重命名为"(stdin)= 1f558fe589c204f1f9d51becb749a6a10f8db6f8". (3认同)
  • 我补充说:printf'%s'"$ noext"| openssl sha1 | awk'{print $ 2}' (2认同)