简体   繁体   中英

Organizing different files with a naming convention?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM