2009-02-06 7 views
1

Je veux créer un script bash extrêmement simple, my_copy.sh, qui lit un nombre arbitraire de fichiers d'entrée, un répertoire de destination, et demande enfin confirmation si vous voulez copier les fichiers.Copier des fichiers dans le répertoire en fonction de l'entrée utilisateur et en utilisant * pour lister les fichiers

Exemple d'utilisation: ./my_copy.sh

Type in the file names to copy: 
file1 file2 Anna Kurt Arne 
Type in the directory to copy to: 
dir_3 
Are you sure you want to copy the files: 
Anna 
Kurt 
Arne 
to the directory dir_3 (y/n)? 

Si le répertoire de destination n'existe pas, il doit être créé par le script.


Ma question suivante:

Je veux que le caractère * pour faire une simple commande ls. Donc, si je tape ./my_copy *, dans la ligne de commande, il devrait lister tous les fichiers dans mon répertoire.

+1

vous devriez faire que deux questions distinctes! – hop

+0

le script que vous proposez est extrêmement non-unixish. Pourquoi voudriez-vous forcer l'utilisateur à entrer tous les noms de fichiers à la main, incapable d'utiliser la globalisation du shell, l'achèvement de l'onglet, etc.? – hop

+0

votre question est un peu floue ... s'il vous plaît expliquer ce qui suit: 1) ce qui est arrivé à file1 et file2? 2) qu'est ce que "mon répertoire"? – hop

Répondre

1

Votre deuxième question est assez difficile. Le shell essaiera d'interpréter * et de le remplacer par tous les éléments du répertoire courant. La seule façon pour le shell de vous donner un * comme seule entrée dans la liste des arguments est si tous les fichiers dans le répertoire ont des noms commençant par un point. Ainsi, votre commande d'exemple serait réellement appelée avec $ 0 = my_copy et $ 1 = my_copy.

4

À moins que le * ne soit échappé ou cité lors de l'appel de votre script, le shell le développera avant que le script le récupère.

./my_copy '*'

ou

./my_copy \ *

On dirait que vous essayez d'ajouter une simple enveloppe de confirmation autour 'cp'. Ou essayez-vous de le faire interactivement inviter l'utilisateur?

+0

Certains shells utilisent en fait une variable d'environnement pour indiquer quels paramètres sont le résultat d'une extension générique. Cependant, en supposant que vous sachiez quel shell l'utilisateur a peut-être pas la plus sage des idées. – Joshua

4

Vous pouvez utiliser "cp -i", ce qui le rend interactif et invite avant l'écrasement. Vous pouvez également ajouter cela sous la forme d'un alias à .bash_profile, de sorte qu'il vous y invite toujours.

0

Vous ne pouvez pas donner * comme argument, mais vous pouvez le remplacer par la lettre « e » par exemple, et faire ceci:

if [ "$1" = "e" ] 
then 
    ls 
else 
    return 0 
fi 
Questions connexes