#1 Le 14/11/2015, à 12:36
- Brunod
awk : problème formatage nombres
Bonjour,
J'essaie de modifier un formatage de sortie de awk, que je suis loin de maîtriser.
Voici la ligne :
ls -RAGgp . | awk '/:$/&&f{s=$0;f=0}
/:$/&&!f{sub(/:$/,"");s=$0;f=1;next}
NF&&f{ print $3s"/"$6 }'
qui me sort les tailles /chemins/fichiers.
Mais je voudrais pour effectuer un tri que les tailles soient formatées sur un nombre fixe de position afin de permettre un tri ultérieur. Il me faut donc un alignement à droite de cette colonne ou des "leading zeros".
J'ai essayé de combiner avec un printf comme suit :
NF&&f{ printf "%10d /%s\n",$3,$6 }'
Mais je n'arrive à rien.
Si une bonne âme passionnée de awk pouvait m'aider, je lui en serais très reconnaissant.
Merci,
BD
Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis
Hors ligne
#2 Le 14/11/2015, à 12:51
- pingouinux
Re : awk : problème formatage nombres
Bonjour,
Si j'ai bien compris, essaye
NF&&f{ printf "%010d /%s\n",$3,$6 }'
Il y a certainement beaucoup plus simple.
Ajouté :
Peut-être ceci
shopt -s globstar
stat -c "%s %n" **/* | sort -n
et pour aligner les tailles
stat -c "%10s %n" **/* | sort -n
Dernière modification par pingouinux (Le 14/11/2015, à 15:06)
Hors ligne
#3 Le 14/11/2015, à 16:56
- Brunod
Re : awk : problème formatage nombres
Merci Pingouinux,
(Je me demande pourquoi, mais je m'attendais à ce que tu réagisses )
La première proposition ne m'aide pas : les chemins disparaissent de chaque ligne et ne précèdent plus les noms de fichiers.
Il semble y avoir une espèce d'effet de bord avec ls...
Je n'ai pas compris l'utilisation de
shopt -s globstar
Quant à
stat -c "%10s %n" **/* | sort -n, modifié en
stat -c "%10s /%n" **/* | sort -rn
Il correspond mieux à mes attentes.
Je me permettrai de te relancer si je bloque.
Merci encore !
BD
Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis
Hors ligne
#4 Le 14/11/2015, à 17:24
- pingouinux
Re : awk : problème formatage nombres
Pour la première commande, j'ai conservé tes numéros de champs, mais ils ne correspondent pas à ma sortie de ls.
Je n'ai pas compris l'utilisation de
shopt -s globstar
C'est pour que la syntaxe **/* soit reconnue (elle ne l'est pas par défaut).
Voici un extrait de man bash
globstar
If set, the pattern ** used in a pathname expansion con‐
text will match all files and zero or more directories
and subdirectories. If the pattern is followed by a /,
only directories and subdirectories match.
Hors ligne
#5 Le 14/11/2015, à 22:50
- Postmortem
Re : awk : problème formatage nombres
Salut,
@Brunod :
Pour la première commande, j'ai conservé tes numéros de champs, mais ils ne correspondent pas à ma sortie de ls.
On ne le dira jamais assez, "ls" n'est pas fait pour récupérer des informations et les traiter, mais seulement pour afficher des informations.
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#6 Le 15/11/2015, à 13:50
- Brunod
Re : awk : problème formatage nombres
Merci @Postmortem,
Je sais, mais de toute manière, même s'il ne fait pas de différence entre noms de fichiers avec ou sans espaces, cr, lf à la fin, moi non plus quand je lis les fichiers sur mon écran.
Or ici, il ne travaille pas sur les noms, mais sur les tailles pour repérer les problèmes.
Je souhaite privilégier la vitesse avant tout.
Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis
Hors ligne
#7 Le 15/11/2015, à 15:32
- pingouinux
Re : awk : problème formatage nombres
Pour voir les tailles, tu as aussi
du -ab | sort -rn
ou
du -ah | sort -rh
Dernière modification par pingouinux (Le 15/11/2015, à 15:32)
Hors ligne
#8 Le 15/11/2015, à 21:00
- Brunod
Re : awk : problème formatage nombres
Suite :
Je voudrai injecter le résultat de cette commande :
stat -c "%10s /%n" **/* | uniq -D -w 10| sort -rn
| cut -b 13-
| sed -e 's/ /\\ /g'
| xargs file
| cut -f 2 -d ':'
| sed -e 's/^[ \t]*//'
à réinjecter à chaque ligne, entre chaque taille et suivi du chemin/nom.ext issu de cette commande :
stat -c "%10s /%n" **/* | uniq -D -w 10| sort -rn
qui est la même que ci-dessus, sans exécuter la commande une seconde fois.
Le but est de faire ensuite un test d'unicité sur base de la clé ainsi constituée par les tailles suivies des résultats de "file".
Merci !
Dernière modification par Brunod (Le 15/11/2015, à 21:02)
Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis
Hors ligne
#9 Le 15/11/2015, à 22:13
- pingouinux
Re : awk : problème formatage nombres
Remarque : uniq ne s'appliquant qu'à des lignes adjacentes, je pense qu'il faut inverser uniq et sort
Si j'ai bien compris ce que tu veux faire
while read taille fic
do
printf "%10s %-18s %s\n" "$taille" "$(file -b "$fic")" "$fic"
done < <(stat -c "%10s %n" **/* | sort -rn | uniq -D -w10)
Hors ligne
#10 Le 15/11/2015, à 22:35
- Brunod
Re : awk : problème formatage nombres
Remarque : uniq ne s'appliquant qu'à des lignes adjacentes, je pense qu'il faut inverser uniq et sort
Ah oui. j'avais un biais parce que mes doublons figurant dans le même sous répertoire, ils se suivaient déjà avant le sort. Dommage, j'espérais diminuer le nombre de ligne à trier en effectuant le uniq avant...
Merci pour le code, je regarderai pour continuer demain, l'esprit plus clair.
Edit : voici ce que j'obtiens :
bruno@UBlaptop:~/Bureau$ while read taille fic; do printf "%10s %-18s %s\n" "$taille" "$(file -b "$fic")":"$fic"; done < <(stat -c "%10s %n" **/* | sort -rn | uniq -D -w10)|sed '/directory:/d'
193916 XML document text:Cadran 7733Fer.sla.autosave
193916 XML document text:Cadran 7733Fer.sla
140153 PDF document, version 1.4:CandidatureDocs/SWDE/D_Bruno_4671_DPL1.pdf
140153 PDF document, version 1.4:CandidatureDocs/Diplome/D_Bruno_PsychoMaster.pdf
83876 PDF document, version 1.4:CandidatureDocs/Bruno_D_CV09.2014.pdf
83876 PDF document, version 1.4:CandidatureDocs/Bruno_D_CV01.2015.pdf
596 ASCII English text:MachinTorrent
596 ASCII text:dummy
Je voudrais maintenant appliquer une nouvelle fois un uniq sur la partie gauche du séparateur ":" (pour virer le cas des deux dernières lignes) puis appliquer un sha1 (sur les débuts et fins de chaque fichier) sur la liste restante, re-uniq pour enfin avoir la liste des vrais doublons.
L'idée est de recréer un fichier rm duplicate.sh comme le fait rmlint.
Dernière modification par Brunod (Le 16/11/2015, à 11:39)
Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis
Hors ligne
#11 Le 16/11/2015, à 12:05
- Brunod
Re : awk : problème formatage nombres
Hmm, je reviens sur ce que j'ai dit : le md5 est beaucoup plus rapide que le sha1.
Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis
Hors ligne
#12 Le 16/11/2015, à 13:43
- pingouinux
Re : awk : problème formatage nombres
Dans ce cas, il est peut-être plus simple de faire un premier tri en comparant les md5sum des 1000 premiers octets des fichiers, puis de faire un md5sum sur la totalité des fichiers ayant passé le premier test.
while read md5 tiret fic
do
printf "%s %s\n" "$(md5sum "$fic")" "$fic"
done < <(
for f in **/*
do
[ -f "$f" ] && printf "%s %s\n" "$(md5sum < <(head -c 1000 "$f"))" "$f"
done | sort | uniq -D -w 32
) | sort | uniq -D -w 32
Hors ligne
#13 Le 16/11/2015, à 14:41
- Brunod
Re : awk : problème formatage nombres
Presque : j'aimerais que cela se fasse après le test de la commande "file" pour ne pas comparer des fichiers de tailles identiques et dont la "nature" est clairement différente, (ceci se faisant sans se baser sur l'extension du fichier).
Voici un exemple de "confusion" :
bruno@UBlaptop:~/Bureau$ while read taille fic; do printf "%10s %-18s %s\n" "$taille" "$(file -b "$fic")":"$fic"; done < <(stat -c "%10s %n" **/* | sort -rn | uniq -D -w10)|sed '/directory:/d'
193916 XML document text:Cadran 7733Fer.sla.autosave
193916 XML document text:Cadran 7733Fer.sla
140153 PDF document, version 1.4:CandidatureDocs/SWDE/D_Bruno_4671_DPL1.pdf
140153 PDF document, version 1.4:CandidatureDocs/Diplome/D_Bruno_PsychoMaster.pdf
83876 PDF document, version 1.4:CandidatureDocs/Bruno_D_CV09.2014.pdf
83876 PDF document, version 1.4:CandidatureDocs/Bruno_D_CV01.2015.pdf
596 ASCII English text:Maple17Torrent
596 ASCII text:dummy
Les deux derniers fichiers ont la même taille mais ne sont clairement pas identiques : pas de md5 requis pour gagner du temps.
Mais pour cela, je dois utiliser comme clé de tri tout ce qui précède le séparateur ":"
Pour le md5, serait-il possible d'utiliser une combinaison head + tail du fichier ? Je crains des en-têtes de fichiers semblables pour certaines catégories de fichiers.
(Tu me diras ce que je te dois pour le travail, en plus des honneurs évidents et de ma sincère reconnaissance !)
Edit : mon obsession pour l'optimisation vient du fait d'avoir déjà tenté quelques outils pour faire le ménage sur un nas avec processeur arm, toujours avec interruption sans succès après des jours d'attente...
Dernière modification par Brunod (Le 16/11/2015, à 14:45)
Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis
Hors ligne
#14 Le 16/11/2015, à 14:54
- Brunod
Re : awk : problème formatage nombres
...
L'idée est de recréer un fichier rm duplicate.sh comme le fait rmlint.
... mais en changeant la procédure d'identification des doublons
car aussi trop lente.
Unix shell script for removing duplicate files
by Jarno Elonen, 2003-04-06...2013-01-17
http://elonen.iki.fi/code/misc-notes/re … ate-files/
OUTF=rem-duplicates.sh;
echo "#! /bin/sh" > $OUTF;
find "$@" -type f -printf "%s\n" | sort -n | uniq -d |
xargs -I@@ -n1 find "$@" -type f -size @@c -exec md5sum {} \; |
sort --key=1,32 | uniq -w 32 -d --all-repeated=separate |
sed -r 's/^[0-9a-f]*( )*//;s/([^a-zA-Z0-9./_-])/\\\1/g;s/(.+)/#rm \1/' >> $OUTF;
chmod a+x $OUTF; ls -l $OUTF
Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis
Hors ligne
#15 Le 16/11/2015, à 19:42
- pingouinux
Re : awk : problème formatage nombres
Tu peux essayer ceci (création de 2 fichiers intermédiaires supprimés à la fin)
# Comparaison des tailles et des types de fichiers (on ne tient compte que des 70 premiers caractères du type)
while read taille fic
do
[ -f "$fic" ] && printf "%10s %-70s :%s\n" "$taille" "$(file -b "$fic")" "$fic"
done < <(stat -c "%10s %n" **/* | sort -rn | uniq -D -w10) | sort -rn | uniq -D -w81 >/tmp/tmp1.$$
# Comparaison des md5sum des 1000 premiers et 1000 derniers octets des fichiers
while IFS=: read deb fic
do
printf "%s%s:%s\n" "$(md5sum < <(head -c 1000 "$fic"))" "$(md5sum < <(tail -c 1000 "$fic"))" "$fic"
done </tmp/tmp1.$$ | sed 's/ -//g' | sort | uniq -D -w65 >/tmp/tmp2.$$
# Comparaison des md5sum des fichiers complets
while IFS=: read deb fic
do
md5sum "$fic"
done </tmp/tmp2.$$ | sort | uniq -D -w32
rm /tmp/tmp1.$$ /tmp/tmp2.$$
Hors ligne
#16 Le 16/11/2015, à 19:56
- Brunod
Re : awk : problème formatage nombres
Merci ! Je regarde (si je comprends) et je reviens. Ça risque de prendre un peu de temps...
Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis
Hors ligne
#17 Le 16/11/2015, à 22:08
- pingouinux
Re : awk : problème formatage nombres
Voici une version corrigée :
# Comparaison des tailles et des types de fichiers (on ne tient compte que des 70 premiers caractères du type)
while read siz fic
do
printf "%10s@%-70s@%s\n" "$siz" "$(file -b "$fic"|sed 's/@/_/g')" "$fic"
done < <(find -type f -exec stat -c "%10s %n" {} \; | sort -rn | uniq -D -w10) | sort -rn | uniq -D -w82 >/tmp/tmp1.$$
# Comparaison des md5sum des 1000 premiers et 1000 derniers octets des fichiers
while IFS=@ read siz typ fic
do
printf "%s@%s%s@%s\n" "$siz" "$(md5sum < <(head -c 1000 "$fic"))" "$(md5sum < <(tail -c 1000 "$fic"))" "$fic"
done </tmp/tmp1.$$ | sort -rn | uniq -D -w82 >/tmp/tmp2.$$
# Comparaison des md5sum des fichiers complets
while IFS=@ read siz md5 fic
do
printf "%s %s\n" "$siz" "$(md5sum "$fic")"
done </tmp/tmp2.$$ | sort -rn | uniq -D -w43
rm /tmp/tmp1.$$ /tmp/tmp2.$$
Édité : Petites corrections
Édité (2) : Remplacement des @ par des _ dans la sortie de la commande file, car @ sert de séparateur
Dernière modification par pingouinux (Le 17/11/2015, à 21:27)
Hors ligne
#18 Le 17/11/2015, à 15:24
- Brunod
Re : awk : problème formatage nombres
Merci Pingouinux,
Je découvre et teste la dernière version.
bruno@UBlaptop:~$ time while read taille fic; do [ -f "$fic" ] && printf "%10s %-70s :%s\n" "$taille" "$(file -b "$fic")" "$fic"; done < <(stat -c "%10s %n" **/* | sort -rn | uniq -D -w10) | sort -rn | uniq -D -w81 >/tmp/tmp1.$$
real 0m0.497s
user 0m0.188s
sys 0m0.060s
bruno@UBlaptop:~$ time while read siz fic; do printf "%10s@%-70s@%s\n" "$siz" "$(file -b "$fic")" "$fic"; done < <(find -type f -exec stat -c "%10s %n" {} \; | sort -rn | uniq -D -w10) | sort -rn | uniq -D -w82 >/tmp/tmp1.$$
find: "./.mc/cedit": Permission non accordée
^C
real 0m5.673s
user 0m0.012s
sys 0m0.000s
bruno@UBlaptop:~$
Je n'aime pas le find... Et même en sudo ça ne fonctionne pas.
Mais la première version de cette section semblait parfaite.
Je creuse...
Edit : Ah, c'est peut-être encore un coup de glob.
- Non, shopt -s globstar ne change rien.
Je vais tenter de te proposer un remix (plein de fautes) et de français...
Dernière modification par Brunod (Le 17/11/2015, à 16:23)
Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis
Hors ligne
#19 Le 17/11/2015, à 16:42
- Brunod
Re : awk : problème formatage nombres
Voici Frankenstein soft : (Edit : avec modifs en cours...)
#! /bin/sh
# bdpin.sh
# big dupe pin out
# Pingouinux – BD - 2015
OUTF=rem-duplicates.sh;
echo "#! /bin/sh" > $OUTF;
#########
shopt -s globstar
#
while read taille fic
do
[ -f "$fic" ] && printf "%10s %-70s :%s\n" "$taille" "$(file -b "$fic")" "$fic"
done < <(stat -c "%10s %n" **/* | sort -rn | uniq -D -w10) | sort -rn | uniq -D -w81 >/tmp/tmp1.$$
# Comparaison des md5sum des premiers 2Mo et derniers 2 Moctets des fichiers (et garde le size)
# test si la taille > 4 Mo , si oui : le fichier d'entrée étant ordonné décroissant,
while IFS=@ read siz typ fic
while [siz -bg 4 Mo]
do
printf "%s@%s%s@%s\n" "$siz" "$(md5sum < <(head -c 2Mo "$fic"))" "$(md5sum < <(tail -c 2Mo "$fic"))" "$fic"
done
printf "%s@%s%s@%s\n" "$siz" "$(md5sum "$fic") »
done </tmp/tmp1b.$$ | sort -rn | uniq -D -w82 >/tmp/tmp2b.$$
# si non : direct dans tmp2 pour calcul md5 complet
#(sans quoi est calculé 3x : head, tail, total)
# Comparaison des md5sum des fichiers complets
while IFS=@ read siz md5 fic
while [siz -le 4 Mo]
do
printf "%s %s\n" "$siz" "$(md5sum "$fic")"
done </tmp/tmp2b.$$ | sort -rn | uniq -D -w43
#rm \1/' >> $OUTF;
chmod a+x $OUTF; ls -l $OUTF
dont le fichier de sortie tojours ordonné décroissant donnerait ceci : cat rem-duplicates.sh
#! /bin/sh
# 193916
#rm ./Cadran\ 7733Fer.sla
#rm ./Cadran\ 7733Fer.sla.autosave
#140153
#rm ./CandidatureDocs/Diplome/D_Bruno_PsychoMaster.pdf
#rm ./CandidatureDocs/SWDE/D_Bruno_4671_DPL1.pdf
#83876
#rm ./CandidatureDocs/Bruno_D_CV01.2015.pdf
#rm ./CandidatureDocs/Bruno_D_CV09.2014.pdf
Qu'en penses-tu ?
Dernière modification par Brunod (Le 17/11/2015, à 19:27)
Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis
Hors ligne
#20 Le 17/11/2015, à 21:28
- Ferod
Re : awk : problème formatage nombres
Bonjour
Si c'est la recherche des fichiers dupliqués qui vous intéresse alors peut être que fslint (https://doc.ubuntu-fr.org/fslint) vous intéressera.
Si c'est de progresser en bash / awk alors vous m'avez déjà perdu. Je vous laisse continuer !
"When I was in the military, they gave me a medal for killing
two men, and a descharge for loving one !" Leonard Matlovich
Hors ligne
#21 Le 18/11/2015, à 09:04
- Brunod
Re : awk : problème formatage nombres
@Ferod : merci, mais fslint (que je connais depuis longtemps) ne m'aide pas dans le cas présent, et bien que je m'en serve avec gui sur mon pc. De même de fdupes, rmlint (source d'inspiration) et autres dont je ne retrouve pas les noms, aussi testés.
Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis
Hors ligne
#22 Le 18/11/2015, à 17:15
- pingouinux
Re : awk : problème formatage nombres
Voici deux méthodes, la seconde étant plus simple et plus rapide. Si la liste obtenue te convient, il est facile de générer le fichier rem-duplicates.sh.
Remarques :
J'utilise find.
- Avec la syntaxe **/*, il faudrait ajouter shopt -s dotglob, pour prendre en compte les fichiers ou répertoires commençant par un point dans le répertoire de départ
- Si on part d'un répertoire très peuplé, on peut avoir une liste d'arguments trop longue$ stat ~/**/* >/dev/null bash: /usr/bin/stat: Argument list too long
On peut calculer le md5sum des n premiers octets d'un fichier, même si le fichier est plus petit que n. On obtient dans ce cas le md5sum du fichier complet
Méthode 1 (même principe qu'en #17)
#!/bin/bash
# Comparaison des tailles et des types de fichiers (on ne tient compte que des 70 premiers caractères du type)
while read -r siz fic
do
printf "%10s@%-70s@%s\n" "$siz" "$(file -b "$fic"|sed 's/@/_/g')" "$fic"
done < <(find "$@" -type f -exec stat -c "%10s %n" {} \; | sort -rn | uniq -D -w10) | sort -t@ -k1,1nr -k2,2 | uniq -D -w82 >/tmp/tmp1.$$
# Comparaison des md5sum des 1000 premiers et 1000 derniers octets des fichiers
while IFS=@ read -r siz typ fic
do
printf "%s@%s%s@%s\n" "$siz" "$(md5sum < <(head -c 1000 "$fic"))" "$(md5sum < <(tail -c 1000 "$fic"))" "$fic"
done </tmp/tmp1.$$ | sort -t@ -k1,1nr -k2,2 | uniq -D -w82 >/tmp/tmp2.$$
# Comparaison des md5sum des fichiers complets
while IFS=@ read -r siz md5 fic
do
printf "%s@%s\n" "$siz" "$(md5sum "$fic")"
done </tmp/tmp2.$$ | sort -t@ -k1,1nr -k2,2 | uniq -D -w43
rm /tmp/tmp1.$$ /tmp/tmp2.$$
Méthode 2 (on ne tient compte dans un premier temps que de la taille et du md5sum des 1000 premiers octets)
#!/bin/bash
# Comparaison des tailles et des md5sum des 1000 premiers octets des fichiers
while IFS=@ read -r siz fic
do
printf "%s@%s@%s\n" "$siz" "$(md5sum < <(head -c 1000 "$fic"))" "$fic"
done < <(find "$@" -type f -exec stat -c "%10s@%n" {} \; | sort -rn | uniq -D -w10) | sort -t@ -k1,1nr -k2,2 | uniq -D -w43 >/tmp/tmp1.$$
# Comparaison des md5sum des fichiers complets
while IFS=@ read -r siz md5 fic
do
printf "%s@%s\n" "$siz" "$(md5sum "$fic")"
done </tmp/tmp1.$$ | sort -t@ -k1,1nr -k2,2 | uniq -D -w43
rm /tmp/tmp1.$$
Hors ligne
#23 Le 18/11/2015, à 17:42
- Brunod
Re : awk : problème formatage nombres
EDIT : Je n'avais pas vu le message précédent avant de poster celui-ci... J'ai adopté une troisième voie.
Nouvel état des lieux :
#! /bin/bash
# bdpin.sh
# big dupe pin out
# Pingouinux – BD - 2015
#OUTF=rem-duplicates.sh;
#echo "#! /bin/bash" > $OUTF;
#########
shopt -s globstar
# Lister récursif depuis répertoire courant des tailles et noms;
# trier pour garder doublons décroissants, ajouter "type" via file, trier pour garde doublons sur taille et type
while read taille fic
do
[ -f "$fic" ] && printf "%10s %-70s :%s\n" "$taille" "$(file -b "$fic")" "$fic"
done < <(stat -c "%10s %n" **/* | sort -rn | uniq -D -w10) | sort -rn | uniq -D -w82 >/tmp/tmp1.$$
# Comparaison des md5sum des premiers 2Mo et derniers 2 Moctets des fichiers (et garde le size)
# test si la taille > 4 Mo , si oui : (le fichier d'entrée étant ordonné décroissant,)
while IFS=@ read siz typ fic
do
while [ "$siz" -gt "4000000" ]
do
# concaténer 4Mo = 2 head + 2 tail
UnMD=$(head -c 2000000 "$fic")$(tail -c 2000000 "$fic")
# un seul md5 sur les 4 Mo reconstitués
printf "%s %s\n" "$siz" "$(md5sum "$UnMD")"
read siz typ fic
done
# un seul md5 sur les fichiers <=4 Mo
printf "%s@%s%s@%s\n" "$siz" "$(md5sum "$fic")" »
done </tmp/tmp1.$$ | sort -rn | uniq -D -w82 >/tmp/tmp2b.$$
# si > 4 Mo et toujours dans liste après md5 concaténé : calcul md5 complet
# Comparaison des md5sum des fichiers complets
while IFS=@ read siz typ fic
do
while [ "$siz" -gt "4000000" ]
do
printf "%s %s\n" "$siz" "$(md5sum "$fic")"
read siz typ fic
done
done </tmp/tmp2b.$$ | sort -rn | uniq -D -w43
#rm \1/' >> $OUTF;
#chmod a+x $OUTF; ls -l $OUTF
ReEDIT : Corrections... Il doit encore être possible d'optimiser, surtout la fin. Mais fatigue pour ce soir
Dernière modification par Brunod (Le 18/11/2015, à 20:46)
Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis
Hors ligne
#24 Le 19/11/2015, à 12:01
- pingouinux
Re : awk : problème formatage nombres
Pour générer le fichier rem-duplicates.sh, il suffit de filtrer la sortie d'un des scripts en #22 avec cette commande :
awk 'BEGIN{print"#!/bin/sh"}{if(s!=$1){t=$1;sub("@.*","",t);printf("\n# Longueur : %10s\n",t);s=$1}{$1="";sub(" ","");print"#rm \""$0"\""}}'
Remarque : Dans chaque série de fichiers identiques, il faut conserver au moins un des #rm sans le décommenter
Dernière modification par pingouinux (Le 19/11/2015, à 12:31)
Hors ligne
#25 Le 19/11/2015, à 16:36
- Brunod
Re : awk : problème formatage nombres
..., il suffit de ...
J'aime la facilité avec laquelle tu élabores ces commandes
Mais je ne partage pas ta perception. Et donc je te remercie d'autant plus pour le coup de main.
Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis
Hors ligne