#1 Le 25/06/2014, à 12:39
- percherie
Copier les dossiers et ignorer les liens symboliques
Bonjour,
Dans un dossier j'ai plusieurs type de dossier. Certains sont "réel" et d'autre sont des liens symbolique. Je souhaite copier uniquement les dossier "réel" et ignorer totalement les liens symbolique (comme si ils n'existaient pas).
J'ai fait plusieurs tentative mais sans résulta concret :
# crée une copie des liens ;-/
cp -aul * Nouveau\ dossier/
# essais avec xargs
find * -type d | xargs cp "{}" ~/Nouveau\ dossier
find * -type d | xargs cp ~/Nouveau\ dossier
find * -type d | xargs -t cp ~/Nouveau\ dossier
Un simple indice ou nom de commande me suffirait, je peut chercher sur internet comment y arriver.
Merci par avance.
Ps : comment copier des fichiers vers un dossier qui n'existe pas encore ? Pour que la création du dossier ce fasse au même moment.
Nomade en camion utilisant Ubuntu. Si vous souhaitez suivre mes voyages : http://toutenkamion.net/
Hors ligne
#2 Le 25/06/2014, à 13:07
- pingouinux
Re : Copier les dossiers et ignorer les liens symboliques
Bonjour,
Voici une méthode
#!/bin/bash
nouveau="chemin du nouveau dossier" # Ne doit pas être dans le répertoire courant
for i in *
do
[ ! -d "$i" || -L "$i" ]] && continue
mkdir -p "$nouveau"
echo cp -R "$i" "$nouveau"
done
Enlever le echo si c'est bon
Hors ligne
#3 Le 25/06/2014, à 14:19
- percherie
Re : Copier les dossiers et ignorer les liens symboliques
Merci pour ton aide. J'ai tenté de définir le chemin avec le raccourcis qui renvoi vers le /home/<compte> (~/test) mais je m'en sort pas (tester avec guillemet, sans, apostrophe normal et inversé). En attendant je défini le chemin complet.
J'ai séché pendant 15 mins mais j'ai fini par trouvé qu'il manquait un crochet en début de condition. Depuis ça fonctionne très bien.
Nomade en camion utilisant Ubuntu. Si vous souhaitez suivre mes voyages : http://toutenkamion.net/
Hors ligne
#4 Le 25/06/2014, à 14:36
- percherie
Re : Copier les dossiers et ignorer les liens symboliques
Oups en utilisant le script je viens de me rendre compte que je doit définir à l'avance le nom des dossiers que je souhaite copier. Certains dossier doivent rester en place.
Comment définir une liste à placer dans la condition de la boucle ? à moins qu'il faut inclure la condition supplémentaire dans la boucle ? Une simple page vers de la documentation et je ferai mes tests empirique.
En tout cas merci pour ton aide.
Nomade en camion utilisant Ubuntu. Si vous souhaitez suivre mes voyages : http://toutenkamion.net/
Hors ligne
#5 Le 25/06/2014, à 16:42
- pingouinux
Re : Copier les dossiers et ignorer les liens symboliques
Tu peux créer un fichier contenant la liste des dossiers à copier (un par ligne).
mkdir -p "$nouveau"
while read dossier
do
echo cp -R "$dossier" "$nouveau"
done <liste_des_dossiers_a_copier
Hors ligne
#6 Le 25/06/2014, à 16:52
- claudius01
Re : Copier les dossiers et ignorer les liens symboliques
Bonsoir,
Sauf erreur de ma part, la commande find (qui est récursive) ne déréférence pas par défaut les liens symboliques (cad ne les suivra pas) ce qui peut être une solution alternative et efficace si le find est suivi d'un tar puis un gzip.
Cordialement, A+
--
Claudius
Hors ligne
#7 Le 26/06/2014, à 21:27
- percherie
Re : Copier les dossiers et ignorer les liens symboliques
Nikel, en définissant à l'avance les dossiers à copier ça me raccourcis énormément le code. Merci pour tout
Nomade en camion utilisant Ubuntu. Si vous souhaitez suivre mes voyages : http://toutenkamion.net/
Hors ligne