Renomeie os arquivos para o BASE64

0

Eu quero renomear apenas nomes de arquivos para o BASE64, não extensão. Então eu criei esse script que não funciona. Alguém pode dizer o seu problema, por favor?

#!/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

Objetivo: Eu quero renomear meus arquivos para o seu Base64 e baixá-los. Um nome de arquivo Base64 será um nome de arquivo válido para download? Se não, existe alguma alternativa para a Base64?

    
por Mustafa Chelik 02.11.2016 / 09:21

2 respostas

0

Recebi ajuda de este post .

Para codificar:

#!/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

Para decodificar:

#!/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

Eu testei os dois; eles trabalham.

    
por Mustafa Chelik 02.11.2016 / 09:45
1

Como um-liner

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

Substitua primeiro echo por mv para realmente renomeá-los

    
por Sergiy Kolodyazhnyy 02.11.2016 / 09:53