我只想将文件名重命名为 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
首先替换echo
为mv
实际重命名它们
答案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
我测试了两者;它们都可以工作。