我正在建立一个网站,我想要散列我的图像的文件名。
如何创建一个bash脚本文件,使用旧文件名的sha1重命名目录中的每个文件?
我试过了:
#!/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
这会重命名文件,但我不确定用于散列文件名的内容。扩展得到了解释吗?走了路?
INFO
然后我将使用PHP的sha1()函数来显示图像:
echo "<img src=\"images/".sha1("$nbra-$nbrb-".SECRET_KEY).".png\" />\n";
答案 0 :(得分: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
答案 1 :(得分:2)
试试这个:
newfile=$(openssl sha1 $file | awk '{print $2}')
mv $file $newfile
答案 2 :(得分: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
答案 3 :(得分:0)
尝试
newfile=$(openssl sha1 $file)
mv "$file" "${newfile##*= }"