Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile

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]

Garba a écrit :

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 `…`
  1. la notation `…` est obsolète, il vaut mieux utiliser $(…) à la place

  2. `…`/$(…) est dangereux dans ce contexte, si des noms de fichiers comportent des espaces tu peux supprimer les mauvais fichiers

  3. 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 wink

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 : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne