I just finished a short lesson into linux cli and I'm trying to use cli as a way to organize & tidy up my files within directories.
The files are of varying format (.png, .jpg, .mp4, .txt, ...) with long string names that doesn't even relate to the file.
My objective is to rename all of them (regardless of extension type) with a common name & attach a number based on their order count. (while keeping the extension type untouched)
Example:
blahblah1234_4312.txt, randompic-2022-14-15.jpg, logo_3355234234.png, slowmovideo_2020-31-06.mp4
renamed into:
droneProject_1.txt, droneProject_2.jpg, droneProject_3.png, droneProject_4.mp4
I'll be doing the same process on other directories so I figured I needed to make a bash script that takes the desired common name as the $1 and the chosen directory as $2 .
I have an idea what to tell the script to do but I don't know how to code it properly, so far here's my attempt; (it's pseudo code...i think)
for file in $2
do
orderCount=1
mv $singleFile $1_$orderCount.keepExtensionType
orderCount=+1
done
It may seem I have no idea what i'm doing but to me that pseudo code makes sense...help
the trick is ${f##*.}
to extract the filename extension. the rest is straightforward(?).
#!/bin/bash
count=1
for f in $2/* ; do
EXT=${f##*.}
mv $f $1_${count}.${EXT}
count=$(( $count + 1 ))
done
I'd do it like that:
#!/bin/bash
prefix=$1
dir=$2
cd "$dir" || exit
n=0
for file in *.*; do
[[ -f $file ]] || continue
printf -v dest '%s_%d.%s' "$prefix" $((++n)) "${file##*.}"
mv -i "$file" "$dest"
done
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.