for file in *.png; do mv -- "$file" "$RANDOM-$RANDOM-$RANDOM.png" done
for file in *.png; do mv -- "$file" "$RANDOM-$RANDOM-$RANDOM.png" done
$RANDOM-$RANDOM-$RANDOM
$RANDOM
$RANDOM-$RANDOM-$RANDOM
/dev/urandom
globstar
If set, the pattern ‘**’ used in a filename expansion context will match all files and zero or more directories and subdirectories. If the pattern is followed by a ‘/’, only directories and subdirectories match.
shopt -s globstar for f in **/*.png; do base_path="${f%/*}" [ "${base_path}" = "${f}" ] && base_path= || base_path="${base_path}/" mv -n "${f}" "${base_path}$ {RANDOM}- $ {RANDOM}- ${RANDOM}.png" done
${f%/*}
/
/
$f
$f
$f
.png
base_path="${f%/*}"
mv -n "${f}" "${base_path}$ {RANDOM}- $ {RANDOM}- ${RANDOM}.png"
$base_path
$base_path
$f
/
$base_path
-n
mv
$ tree . ├── foo │ ├── 1.png │ └── bar │ ├── 2.png │ └── baz │ └── 3.png └── script.sh 4 directories, 4 files $ shopt -s globstar $ for f in **/*.png; do base_path="${f%/*}" [ "${base_path}" = "${f}" ] && base_path= || base_path="${base_path}/" mv -n "${f}" "${base_path}$ {RANDOM}- $ {RANDOM}- ${RANDOM}.png" done $ tree . ├── foo │ ├── 21462-21532-6024.png │ └── bar │ ├── 8568-7432-8514.png │ └── baz │ └── 19171-25385-32563.png └── script.sh 4 directories, 4 files
for f in **/*.png; do base_path="${f%/*}" [ "${base_path}" = "${f}" ] && base_path= || base_path="${base_path}/" mv -n "${f}" "${base_path}$ {RANDOM}- $ {RANDOM}- ${RANDOM}.png" done
$RANDOM
tr -dc '[:alnum:]' </dev/urandom | fold -w5 | head -n1
tr -dc '[:alnum:]' </dev/urandom
/dev/urandom
[:alnum:]
[0-9A-Za-z]
fold -w5
tr
head -n1
function rand() { tr -dc '[:alnum:]' </dev/urandom | fold -w5 | head -n1 } shopt -s globstar for f in **/*.png; do base_path="${f%/*}" [ "${base_path}" = "${f}" ] && base_path= || base_path="${base_path}/" mv -n "${f}" "${base_path}"$(rand)"-"$(rand)"-"$(rand)".png" done
$ function rand() { tr -dc '[:alnum:]' </dev/urandom | fold -w5 | head -n1 } $ shopt -s globstar $ for f in **/*.png; do base_path="${f%/*}" [ "${base_path}" = "${f}" ] && base_path= || base_path="${base_path}/" mv -n "${f}" "${base_path}"$(rand)"-"$(rand)"-"$(rand)".png" done $ tree . ├── foo │ ├── 5dL7N-1DHgd-YV6Uw.png │ └── bar │ ├── 2nwhr-N0YpM-1ABn0.png │ └── baz │ └── IiohU-JTW1k-4PgFk.png └── script.sh 4 directories, 4 files
shopt -s globstar for f in **/*.{png,gif}; do base_path="${f%/*}" [ "${base_path}" = "${f}" ] && base_path= || base_path="${base_path}/" ext="${f##*.}" mv -n "${f}" "${base_path}$ {RANDOM}- $ {RANDOM}- ${RANDOM}.$ {ext}" done
**/*. {png,gif}
**/*.png **/*.gif
.png
.gif
${f##*.}
.
.
$f
$f
$ tree . ├── foo │ ├── 1.png │ └── bar │ ├── 2.gif │ └── baz │ └── 3.png └── script.sh 4 directories, 4 files $ shopt -s globstar $ for f in **/*. {png,gif}; do base_path="${f%/*}" [ "${base_path}" = "${f}" ] && base_path= || base_path="${base_path}/" ext="${f##*.}" mv -n "${f}" "${base_path}$ {RANDOM}- $ {RANDOM}- ${RANDOM}.$ {ext}" done $ tree . ├── foo │ ├── 27150-25336-3117.png │ └── bar │ ├── 4841-14490-4418.gif │ └── baz │ └── 27852-28183-26777.png └── script.sh 4 directories, 4 files
.png
.gif
png,gif
for
png,gif,jpg,...
rname="${base_path}$ {RANDOM}- $ {RANDOM}- ${RANDOM}.$ {ext}"; while [[ -e "$rname" ]]; do rname="${base_path}$ {RANDOM}- $ {RANDOM}- ${RANDOM}.$ {ext}"; done
-n
find . -name '*.png' -execdir bash -c ' for f; do echo mv -n -- "$f" "$RANDOM-$RANDOM-$RANDOM.png"; done ' find-bash {} +
shopt -s globstar rename -n --filename -e ' BEGIN{use String::Random qw(random_regex)} $_ = random_regex("\\d {5}- \\d {5}- \\d{5}") . ".png" ' -- **/*.png
-d, --filename, --nopath, --nofullpath Do not rename directory: only rename filename component of path.
rename -n --filename -e ' BEGIN{use String::Random qw(random_string)} $_ = random_string("cCncCn") . ".png" ' -- **/*.png rename(foo/1.png, foo/zS3nD1.png) rename(foo/bar/2.png, foo/bar/kX2gB9.png) rename(foo/bar/baz/3.png, foo/bar/baz/iU6eB8.png)
rename -n --filename -e ' BEGIN{use String::Random qw(random_string)} s/.*(?=\. [^.]*)/random_string("cCncCn")/e ' -- **/*. {png,jpg}
rename -n --filename -e ' BEGIN{use String::Random qw(random_string); use File::Basename qw(fileparse)} $_ = random_string("cCncCn") . (fileparse($_, qr/\.[^.]*/)) [2] ' -- **/*. {png,jpg}
[1] ex. given $ ls *.sh best.sh test.sh then $ rename 's/test/best/' -- *.sh test.sh not renamed: best.sh already exists
--filename
perl-rename
mv
--filename
#!/ bin/bash find /pictures -name "*png" | while read FILE ; do basedir="$(dirname "$FILE")" # get directory part filename="$(basename "$FILE" .png)" # get name part, no extension newname="$(md5sum "$filename")" # get hash of dir/filename.png mv "$FILE" "$basedir/${newname}.png" # "move/rename" to same dir done
for
read
for
find . -name "*png" -print0 | while IFS= read -d $'\0' FILE ; do
*.png