2008-09-16 5 views
1

J'ai besoin de réorganiser du contenu dans divers répertoires mais c'est un peu pénible. Afin de déboguer l'application sur laquelle je travaille (une application ruby) j'ai besoin de déplacer mes gemmes dans mon dossier de gemme une à la fois (longue histoire, bref: on est cassé et je ne peux pas savoir lequel).Comment puis-je créer une instruction en ligne de commande (unix/linux) qui utilise des variables pour exécuter de nombreuses commandes?

donc je dois faire quelque chose comme:

sudo mv backup/gem/foo gem/ 
sudo mv backup/doc/foo doc/ 
sudo mv backup/specification/foo.gemspec specification/ 

remplaçant "foo" à chaque fois. Comment puis-je créer un simple script shell pour me laisser faire quelque chose comme: gemMove ("foo") et remplir les espaces vides pour moi?

Répondre

4

il faut mettre dans un fichier nommé gemmove:

#!/bin/bash 

foo=$1 

if [ x$foo == x ]; then 
    echo "Must have an arg" 
    exit 1 
fi 

for d in gem doc specification ; do 
    mv backup/$d/$1 $d 
done 

puis faire

chmod a+x gemmove 

puis appelez 'sudo gemmove foo' pour déplacer le joyau foo de la sauvegarde dirs dans les vrais

+0

Merci! Cela a fonctionné à merveille. – Anutron

1

Vous pouvez simplement utiliser les arguments shell bash, comme ceci:

#!/bin/bash 
# This is move.sh 
mv backup/gem/$1 gem/ 
mv backup/doc/$1 doc/ 
# ... 

puis l'exécuter comme:

sudo ./move.sh foo 

Assurez-vous rendre le script exécutable, avec

chmod +x move.sh 
1

à coup, quelque chose comme:

function gemMove() 
{ 
filename=$1 
    mv backup/gem/$filename gem/$filename 
    mv backup/doc/$filename doc/$filename 
    mv backup/specification/$filename.spec specification 
} 

alors vous pouvez simplement appeler gemMove("foo") ailleurs dans le script.

+0

Ou vous pouvez ajouter la fonction à votre .bashrc pour le rendre toujours disponible. –

Questions connexes