Added hashify filename

This commit is contained in:
ByteDream 2021-05-24 23:25:24 +02:00
parent 634a2420cf
commit 111fb3e505
2 changed files with 81 additions and 0 deletions

View File

@ -0,0 +1,20 @@
## Hashify Filename
With this little script you can randomize the names of given files. File extension won't be changed.
#### Arguments
The file takes several arguments
`-r` - recursive: If any directory where given while calling this command, all files in it will be renamed recursively.
`-a` - all (the name is a little misleading): Normally directories are not renamed, but with this argument they will.
`-l LENGHT` - lenght: The lenght of the randomized filenames (default is 16). Replace `LENGHT` with the lenght the randomized names should have.
#### Usage
```
$ randomize-filename.sh -r .
```

View File

@ -0,0 +1,61 @@
#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
recursive=false
while getopts ":r?" opt; do
case $opt in
r)
recursive=true
;;
*)
echo $usage
exit 1
esac
done
shift $((OPTIND-1))
function rename() {
local base="$1"
shift 1
for file in $*; do
file=${file//[\\]/}
filepath="$base/$file"
ext="${file##*.}"
if [ "$ext" == "$file" ]; then
ext=""
else
ext=".$ext"
fi
if [ -d $filepath ]; then
if $recursive && [ ! -L $filepath ]; then
rename "$filepath" $(ls -b $filepath)
fi
continue
fi
filename="$(md5sum $filepath | awk '{print $1}')$ext"
mv "$filepath" "$base/$filename"
done
}
if [ "$#" -eq 0 ]; then
echo "At least one file must be given"
exit 1
fi
declare -a files=()
for file in $@; do
if [[ $file != /* ]]; then
file="$(pwd)/$file"
fi
files+=("$file")
done
rename "/" "${files[@]}"
IFS=$SAVEIFS