/ / Come rinominare 50 file in una directory con uno script mac bash? - bash

Come rinominare 50 file in una directory con uno script mac bash? - bash

Sto testando una rete neurale con cui ho realizzatoFaccine, Frowney e facce neutre. Ho 50 foto di faccine, 50 foto di volti di frowney e 50 foto di volti neutri (.png) ciascuno in diverse directory.

Voglio cambiare il nome di ciascun file in ogni categoria in qualcosa del tipo:

NeutralDraw0
NeutralDraw1
NeutralDraw2
.
.
.
NeutralDraw50

A partire da ora, sono stati nominati in modo casuale perché non stavo prestando attenzione al nome quando ho fatto le foto. Ci sono nomi come "Senza nome" e "numero 3" e così via.

Voglio sapere come creare uno script bash che utilizza un ciclo for o simili per rinominare ogni file:

"Frowney/Smiley/Neutral" + "Draw" + Number

Proprio come sopra

risposte:

1 per risposta № 1

Il problema è che hai un modello per il nome file di destinazione, ma sembra non averne uno per il nome file di origine. Quindi scrivere una sceneggiatura per farlo è complicato. Salvo che...

1) Crea 3 directory.

mkdir Frowney Smiley Neutral

2) spostare i file nella directory corretta manualmente.

3) Quindi eseguire questo:

#!/bin/bash
#
dirs="Frowney Smiley Neutral"

# Verify that the directories exist
for dir in $dirs
do
if [ ! -d $dir ]
then
echo "ERROR: missing $dir!"
exit 1
fi
done

# process the directories
for dir in $dirs
do
echo "Processing $dir..."

counter=0
cd $dir
/bin/ls -c1 | while read -r file
do
ext="${file##*.}"
cp "$file" ../${dir}Draw$counter.$ext
(( counter = counter + 1 ))
done
cd ..
done

Nota 1: Non ho un Mac su cui provarlo, l'ho fatto su Linux. Spero (e penso) che bash su Mac non sia troppo diverso da bash su Linux. Non ho usato nessuna strana funzione o comando che un bash standard non avrebbe fornito.

Nota 2: utilizzo il comando cp e non mv. In questo modo non modifica la tua fonte. Se lo script fa qualcosa di strano, non perderai i tuoi file sorgente. Se soddisfatto, elimina le 3 directory.

Nota 3: i file possono avere spazi nel loro nome, il ciclo while si occupa di questo.

Nota 4: allo script non importa se hai più o meno di 50 file, è solo un contatore.