Added randomize filename

This commit is contained in:
ByteDream 2021-05-24 23:07:00 +02:00
parent 31f0f2b81f
commit 306a4ec86c
2 changed files with 99 additions and 0 deletions

View File

@ -0,0 +1,20 @@
## Randomize 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,79 @@
#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
usage="$0 [-r] [-a] [-l LENGHT] files..."
recursive=false
all=false
lenght=16
while getopts ":r?a?l:" opt; do
case $opt in
r)
recursive=true
;;
a)
all=true
;;
l)
lenght=$OPTARG
echo $lenght
if [[ ! $lenght =~ ^[0-9]+$ ]]; then
echo $usage
exit 1
fi
;;
*)
echo $usage
exit 1
esac
done
shift $((OPTIND-1))
function rename() {
local base="$1"
shift 1
for file in $*; do
file=${file//[\\]/}
echo $file
filepath="$base/$file"
ext="${file##*.}"
if [ "$ext" == "$file" ]; then
ext=""
else
ext=".$ext"
fi
filename="$(tr -dc A-Za-z0-9 </dev/urandom | head -c 16)$ext"
if [ -d $filepath ]; then
if $recursive && [ ! -L $filepath ]; then
rename "$filepath" $(ls -b $filepath)
fi
if ! $all; then
continue
fi
fi
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