[shell] Copier des fichiers

Résolu
hiiimoo -  
 hiiimoo -
Bonjour,

j'essai de faire ceci en script shell :

copier tous les fichier (seul les fichiers) du répertoire passer en paramètre (tout les niveaux de profondeur) dans le répertoire racine de l'utilisateur $HOME !

j'ai essayer de faire cela en une fonction récursive :

function seek() {
for fic in `ls $1`
do
if test -f $1/$fic
then cp $1/$fic $HOME/archive
fi
if test -d $1/$fic
then seek() $1/$fic
fi
done
}
seek()


et ça marche toujours pas !
A voir également:

3 réponses

jipicy Messages postés 41342 Statut Modérateur 4 896
 
Salut,

find "${1}" -type f -exec cp -v {} "${HOME}"/archive/ \;

3
mamiemando Messages postés 34184 Statut Modérateur 7 888
 
C'est beaucoup plus simple avec un find (notamment l'option -f) et un pipe ( | ) ou une boucle for. Dans ton cas je ferais plutôt un for pour pouvoir passer par une variable intermédiaire (que je noterai x). Dans l'idée, ça ressemble à un truc dans ce genre :

#!/bin/sh

$src=$1
$dst=${HOME}
for x in `find ${src} -type f`
do
  cmd="cp $x ${dst}/`basename $x`"
  echo "je vais lancer la commande suivante : $cmd"
  ${cmd}
done


En toute rigueur tu es sensé contrôler au début du programme qu'un argument a bien été passé à ton script et le cas échéant, envoyer un message d'erreur...

Dans le cas général, il faut s'assurer que src et dst sont des répertoires (et pas un fichier régulier) et qu'ils existent (par exemple à l'aide d'un if [ -d $src ] ....)

Bonne chance
2
hiiimoo
 
ça marche , merci jipicy !
0