#1 Le 28/05/2013, à 13:37
- Garba
Suppression de fichiers depuis une liste. [Résolu]
Bonjour,
Voilà, j'ai fait une importation de photos sur Shotwell qui m'a donné en retour la liste des photos en double.
Je l'ai donc exportée dans un fichier .txt dont le contenu se présente de la façon suivante:
Path/Fichier 1 Duplique les éléments existants
Path/Fichier 2
Du coup, je voulais en profiter pour supprimer les doublons.
J'avais pensé à un grep sur "Duplique les éléments existants" pour récupérer la ligne du Fichier 1 mais existe t'il une commande pour supprimer le "Duplique les éléments existants" de la ligne ainsi récupérée.
Ou mieux existe t'il une commande pour récupérer directement la variable Path/Fichier 1 sachant que le Path varie d'une ligne sur l'autre ?
Merci d'avance
Dernière modification par Garba (Le 29/05/2013, à 18:20)
Hors ligne
#2 Le 28/05/2013, à 15:21
- Hizoka
Re : Suppression de fichiers depuis une liste. [Résolu]
regarde du coté de fdupes, il fait ca tres bien
mais pour repondre a ta question :
sed -n "/Duplique les éléments existants/ s/Duplique les éléments existants//p" fichier.txt
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#3 Le 28/05/2013, à 20:27
- aduxas
Re : Suppression de fichiers depuis une liste. [Résolu]
Si tes noms de fichier ne contiennent pas de blancs:
for file in `awk '/Duplique les éléments existants/{print $1}' fichier.txt`; do rm $file;done
Hors ligne
#4 Le 28/05/2013, à 23:17
- Garba
Re : Suppression de fichiers depuis une liste. [Résolu]
Ah voilà, c'est sed que je cherchais !
Merci beaucoup !
Du coup j'ai fait un
rm `grep -E "Duplique les éléments existants" /media/laptop/shotwell.txt | sed -e "s/Duplique les éléments existants//g"`
Ça vous semble correct ? (c'est un rm, je voudrais pas gaffer ^^)
Hors ligne
#5 Le 29/05/2013, à 08:15
- Hizoka
Re : Suppression de fichiers depuis une liste. [Résolu]
grep -E "Duplique les éléments existants"
Inutile d'utiliser -E ou egrep dans ton cas, tu n'utiles pas d'expression rationnelle.
sed -e "s/Duplique les éléments existants//g"
-e inutile
g : inutile vu qu'il n'y a cette phrase qu'une fois par ligne
grep -E "Duplique les éléments existants" /media/laptop/shotwell.txt | sed -e "s/Duplique les éléments existants//g"
Pourquoi utiliser grep et un pipe inutile alors que je t'ai donné une commande sed qui fait les 2 ?
rm `grep -E "Duplique les éléments existants" /media/laptop/shotwell.txt | sed -e "s/Duplique les éléments existants//g"`
il faut eviter d'utiliser les `` et préférer $().
Si ta commande renvoie plusieurs fichiers, ca ne marchera pas s'il y a des espaces (trop dangereux tout ca)
il vaut mieux passer par une boucle
while read
do
echo "Nous allons supprimer le fichier : ${REPLY}"
#rm "${REPLY}"
done < <(sed -n "/Duplique les éléments existants/ s/Duplique les éléments existants//p" fichier.txt)
teste et si c'est ok, decommente le rm.
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#6 Le 29/05/2013, à 18:19
- Garba
Re : Suppression de fichiers depuis une liste. [Résolu]
À vrai dire, je n'avais pas vu que ta commande sed faisait déjà le boulot du grep
ça marche nickel, merci beaucoup.
Hors ligne
#7 Le 30/05/2013, à 04:36
- nesthib
Re : Suppression de fichiers depuis une liste. [Résolu]
Du coup j'ai fait un
rm `grep -E "Duplique les éléments existants" /media/laptop/shotwell.txt | sed -e "s/Duplique les éléments existants//g"`
Ça vous semble correct ? (c'est un rm, je voudrais pas gaffer ^^)
Ça me semble toujours une mauvaise idée d'utiliser une commande du genre :
rm `…`
la notation `…` est obsolète, il vaut mieux utiliser $(…) à la place
`…`/$(…) est dangereux dans ce contexte, si des noms de fichiers comportent des espaces tu peux supprimer les mauvais fichiers
envoyer une, potentiellement, trop grande liste de fichiers en argument peut faire planter la commande.
Je suggérerais ici d'utiliser quelque chose de la forme : « commande … | xargs … », je validerais la sortie avant de lancer le rm et éventuellement j'utiliserais l'option « -i » de rm. Par mesure de sécurité tu peux aussi faire une copie de sauvegarde du dossier avant de lancer la commande. Ce sont de simples conseils de prudence qui t'éviteront de perdre tes données en cas d'erreur, car une fois que la commande est partie les dégâts se font très vite
edit : bon je vois qu'Hizoka en parle déjà ^^ mais mieux vaut deux fois qu'une !
Dernière modification par nesthib (Le 30/05/2013, à 04:38)
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne