Я хочу переименовать только имена файлов к их 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?
Я получил справку от это сообщение .
Для кодирования:
#!/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
я протестировал обоих; они работают.
Как острота
$ for file in * ; do echo "$file" "$(basename $file | base64 )"."${file##*.}" ; done
file1.png ZmlsZTEucG5nCg==.png
file2.jpeg ZmlsZTIuanBlZwo=.jpeg
file3.txt ZmlsZTMudHh0Cg==.txt
Замена сначала echo
с mv
для фактического переименования их