[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[BASH] Rinominare directory



Ciao a tutti,

Mi trovo nella situazione di avere delle cartelle e dei file.
Ho una cartella dir1 e una cartella dir1.alt.
Ogni tanto mi trovo nella situazione di dover sostituire temporaneamente
dir1 con dir1.alt, rinomando dir1 in dir1.old e dir1.alt in dir.
Lo stesso dovrebbe avvenire con delle "dir2" (insieme alle quali viene
obbligatoriamente cambiato "file" con "file.alt").

Il mio script bash dovrebbe prima informarmi se sono presenti le cartelle .old e .alt, e chiedermi se sostituire dir1, dir2 o entrambe, capendo da solo
se dover sostituire con le .alt o rimettere le .old al loro posto.

Sfortunatamente sono un po' arrugginito in bash e programmazione, e come
mi aspettavo il mio script è incasinato più del dovuto e non funziona.

Questo è lo script:

#!/bin/bash
adir="dir1";
tdir="dir2";
tfile="file";

echo "0  ---> OK";
echo ">0 ---> NOT"

ls "$adir.old" &> /dev/null;
adOLDP=$?;
echo "a OLD ---> $adOLDP";

ls "$adir.alt" &> /dev/null;
adALTP=$?;
echo "a ALT ---> $adALTP";

ls "$tdir.old" &> /dev/null;
tdirOLDP=$?;
echo "T OLD ---> $tdirOLDP"

ls "$tdir.alt" &> /dev/null;
tdirALTP=$?;
echo "T ALT ---> $tdirALTP";
echo;

echo "1) Switch a";
echo "2) Switch t";
echo "3) Switch Both";
echo "0) Nothing";

read
if [[ $REPLY>3 || $REPLY<0 ]]
	then REPLY=0;
fi

if [ $REPLY == 0 ]
	then echo "Nothing done"; exit;
fi

if [[ "$REPLY == 1" || "$REPLY == 3" ]]
	then if [ "$adOLDP"=="0" ]
		then echo "Switching to a OLD";
		mv "$adir" "$adir.alt";
		mv "$adir.old" "$adir";
	fi
	else if [ "$adALTP"=="0" ]
		then echo "Switching to a ALT";
		mv "$adir" "$adir.old";
		mv "$adir.alt" "$adir";
	fi
fi

if [[ "$REPLY == 2" || "$REPLY == 3" ]]
	then if [ "$tdOLDP"=="0" ]
		then echo "Switching to t OLD";
		mv "$tdir" "$tdir.alt";
		mv "$tdir.old" "$tdir";
		mv "$tfile" "$tfile.alt":
		mv "$tfile.old" "tfile.alt"
	fi
	else if [ "$tdALTP"=="0" ]
		then echo "Switching to t ALT";
		mv "$tdir" "$tdir.old";
		mv "$tdir.alt" "$tdir";
		mv "$tfile" "$tfile.old";
		mv "$tfile.alt" "$tfile";
	fi
fi

### Fine script


Come intervengo? Se anziché rinominare le cartelle usassi
dei symlink potrei eseguire operazioni in lettura e scrittura nei file
all'interno in modo totalmente trasparente?

Grazie in anticipo per l'aiuto
Davide

Reply to: