Como Don Crissti menciona, existem várias maneiras de resolver isso com find
. Mas eu pensei, já que estamos falando apenas de dois níveis de diretório, que podemos fazer isso de forma ligeiramente diferente com apenas um comando externo: mv
#!/bin/bash
fixdir()
{
local f g
for f in Fever*
do
if [ -e "$f" ]
then
g=Malaria"${f#Fever}"
if [ -e "$g" ]
then
echo "Skipping $1/$f->$1/$g; already exists"
else
# echo "Renaming $1/$f->$1/$g"
mv "$f" "$g"
fi
fi
done
}
for a in *
do
if [ -d "$a" ]
then
(cd $a ; fixdir $a )
fi
done
fixdir .
Os resultados:
$ ls -1d F*/*
Fever-A/Malaria-A-A
Fever-B/Fever-B-A
Fever-B/Fever-B-B
Fever-C/Fever-C-A
Fever-C/Fever-C-B
Fever-C/Fever-C-C-C
Fever-C/Malaria-A
Fever-D/Malaria-A
Fever-D/Malaria-B
$ ./fix
$ ls -1d M*/*
Malaria-A/Malaria-A-A
Malaria-B/Malaria-B-A
Malaria-B/Malaria-B-B
Malaria-C/Malaria-A
Malaria-C/Malaria-C-A
Malaria-C/Malaria-C-B
Malaria-C/Malaria-C-C-C
Malaria-D/Malaria-A
Malaria-D/Malaria-B