将文件重命名为 BASE64

将文件重命名为 BASE64

我只想将文件名重命名为 BASE64,而不是扩展名。所以我创建了这个脚本,但它不起作用。有人能告诉我它的问题吗?

#!/bin/bash
#initialize with random text
onlyfilename="abc"
extension="def"
#go through all files in the directory
for filename in ./*;
do
        #avoid my script files (enc & dec)
        if [ $filename != "./enc" ] && [ $filename != "./dec"  ]; then
                #remove ./ from beginning and get just filename
                $onlyfilename=$(basename ${filename:2})
                #get extension
                $extension=${onlyfilename##*.}
                #check if they are correct
                echo $onlyfilename
                echo $extension
                #rename filename to base64
                mv "$filename" "$(echo -n $onlyfilename | base64).$extension"
        fi
done

目的:我想将文件重命名为 Base64 并下载。Base64 文件名是否是有效的下载文件名?如果不是,Base64 有没有其他替代方案?

答案1

作为一行

$ for file in * ; do echo  "$file" "$(basename $file | base64 )"."${file##*.}" ; done
file1.png ZmlsZTEucG5nCg==.png
file2.jpeg ZmlsZTIuanBlZwo=.jpeg
file3.txt ZmlsZTMudHh0Cg==.txt

首先替换echomv实际重命名它们

答案2

我得到了帮助这个帖子

编码:

#!/bin/bash
#ENCODE
for file in *;
do
    if [ $file != "enc" ] && [ $file != "dec"  ]; then
        new_name=$(echo -n "${file%.*}" | base64 -w0)
        mv "$file" "$new_name.${file##*.}"
    fi
done

解码:

#!/bin/bash
#DECODE
for file in *;
do
    if [ $file != "enc" ] && [ $file != "dec"  ]; then
        new_name=$(echo -n "${file%.*}" | base64 -w0 --decode)
        mv "$file" "$new_name.${file##*.}"
    fi
done

我测试了两者;它们都可以工作。

相关内容