#1 Le 20/03/2012, à 18:46
- chryslervert
[Resolu] Supprimer dossier suivant le poid en ligne de commande
Bonjour à tous,
Version Ubuntu 11.04
Pour résumer la situation post-windows:
Compte tenu de la taille de ma discographie, je passe doucement les fichiers sous ubuntu.
J'avais mes petites habitudes avec foobar2000 et ma discographie était parfaitement organisée, taggée, avec les pochettes. Maintenant, sous ubuntu, Banshee réorganise mes dossiers et classe mes fichiers automatiquement (un peu déstabilisé au début, je trouve cela plutôt confortable).
Le problème:
Aussi quand je copie ma discographie, de nouveaux dossiers sont crées et je me retrouve avec des doublons de pochettes, de dossiers.
Avant:
Artiste A / [date] Album
> cover.jpg
> song.flac
Après le passage à la moulinette banshee
Artiste A / [date] Album
> cover.jpg
Artiste A / Album
> cover.jpg
> song.flac
Mon idée:
Effacer les dossiers dont le contenu a une taille inférieure à 50ko (je me dis qu'il y a peu de chance que ce soit une musique, et peu de chance que la pochette pèse plus). Cela ne nettoierait pas tout, mais 90% à mon avis.
Avant que je fasse un transfert global, je me cherchais une ligne de commande qui me permettrais de nettoyer tout cela facilement. J'ai bien trouvé pour effacer les fichiers, mais cela effacerait aussi les pochettes des bons dossiers.
Même si j'utilise maintenant ubuntu depuis 1 an, j'avoue avoir un comportement encore très windowsien et ne pas réellement exploiter le terminal.
Si quelqu'un a une idée...
Par avance merci,
jbo
Dernière modification par chryslervert (Le 22/03/2012, à 23:59)
Orange pressée // Ubuntu 22.04
Hors ligne
#2 Le 20/03/2012, à 18:54
- sputnick
Re : [Resolu] Supprimer dossier suivant le poid en ligne de commande
Salut,
pour chercher et voir ce qu'il "voit"
find -size -50k -type f
pour le faire en vrai
find -size -50k -type f -delete
A tester, de tete ça donne ça.
Dernière modification par sputnick (Le 20/03/2012, à 18:56)
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#3 Le 21/03/2012, à 11:04
- chryslervert
Re : [Resolu] Supprimer dossier suivant le poid en ligne de commande
Bonjour Sputnick,
Merci pour votre réponse.
Après un test, cette commande fait bien ressortir les fichier dont la taille est inférieure à 50ko. Du coup, elle effacerait également les fichiers présents dans les nouveaux dossiers. C'est pour cela que je souhaitais faire un tri au niveau des dossiers afin que les dossiers ayant de la musique ne soient pas considérés par le nettoyage.
Bonne journée,
jbo
Orange pressée // Ubuntu 22.04
Hors ligne
#4 Le 21/03/2012, à 13:19
- Levi59
Re : [Resolu] Supprimer dossier suivant le poid en ligne de commande
Tu as essayé de remplacer -type f par -type d
Hors ligne
#5 Le 21/03/2012, à 17:00
- chryslervert
Re : [Resolu] Supprimer dossier suivant le poid en ligne de commande
Merci pour votre réponse Levi59.
Néanmoins si je remplace le type, j'ai l'impression que tous les dossiers sont listés...
Ça se corse
Bonne journée,
jbo
Orange pressée // Ubuntu 22.04
Hors ligne
#6 Le 21/03/2012, à 18:06
- sputnick
Re : [Resolu] Supprimer dossier suivant le poid en ligne de commande
Voici une solution (find ne traite que les fichiers avec l'option -size) :
pour afficher :
maxsize=50 find -type d -execdir bash -c 'info=( $(du -s "$1") ); ((info[0] < maxsize)) && echo "${info[1]}"' -- {} \;
pour effacer après vérification:
maxsize=50 find -type d -execdir bash -c 'info=( $(du -s "$1") ); ((info[0] < maxsize)) && rm -rf "${info[1]}"' -- {} \;
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#7 Le 21/03/2012, à 18:37
- sputnick
Re : [Resolu] Supprimer dossier suivant le poid en ligne de commande
Autre version qui supporte les dossiers avec des espaces dans les noms :
(requiert bash4)
pour tester
shopt -s globstar
printf '%s\n' -- **/*/ |
xargs -I% du -s "%" |
awk '{size=$1; if (size < 50){$1=""; gsub("(^ |/$)", ""); print "rm -rf \042"$0"\042"}}'
pour le faire en vrai
shopt -s globstar
printf '%s\n' -- **/*/ |
xargs -I% du -s "%" |
awk '{size=$1; if (size < 50){$1=""; gsub("(^ |/$)", ""); print "rm -rf \042"$0"\042"}}' |
bash
Dernière modification par sputnick (Le 21/03/2012, à 23:20)
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#8 Le 21/03/2012, à 22:57
- chryslervert
Re : [Resolu] Supprimer dossier suivant le poid en ligne de commande
Bonsoir,
sputnick, merci pour les commandes.
Concernant celle de 18h06
maxsize=50 find -type d -execdir bash -c 'info=( $(du -s "$1") ); ((info[0] < maxsize)) && echo "${info[1]}"' -- {} \;
En effet, il y a des espace dans les noms. Du elle semble lister pas mal de chose mais j'ai l'impression qu'elle passe à côté des dossiers increminés... Mais pas toujours. Difficile à dire quand j'obtiens ceci (c'est un extrait):
./Calypsoul
./[1972]
./[2007]
./[1972]
./[2002]
./[2003]
./[2004]
./[2005]
./[2010]
./[1994]
./[1996]
./[1998]
./[2006]
./[2006]
./[2006]
Concernant celle de 18h37
printf '%s\n' -- **/*/ |
xargs -I% du -s "%" |
awk '{size=$1; if (size < 50){$1=""; gsub("(^ |/$)", ""); print "rm -rf \042"$0"\042"}}'
Elle ne semble pas scanner tout le dossier et me propose ceci:
rm -rf "2 Badcard/[1995] Hustling Ability"
du: impossible d'accéder à «30 Ans DAgitation Musicale En France/30 Years Of Musical Insurrection In France CD 1 - 70s_ 1969_77_/»: Aucun fichier ou dossier de ce type
du: impossible d'accéder à «30 Ans DAgitation Musicale En France/30 Years Of Musical Insurrection In France CD 2 - 80s_ 1977_90_/»: Aucun fichier ou dossier de ce type
du: impossible d'accéder à «30 Ans DAgitation Musicale En France/30 Years Of Musical Insurrection In France CD 3 - 90s_ 1991_97/»: Aucun fichier ou dossier de ce type
rm -rf "3rd Bass/[1989] The Cactus Album"
rm -rf "A collection Of Modern Afro Rythms/Bilongo"
rm -rf "A collection Of Modern Afro Rythms/Ouelele"
rm -rf "Adam Green/[2008] Sixes & Sevens"
du: impossible d'accéder à «Adjabel/[2010] FIRST - racine5/»: Aucun fichier ou dossier de ce type
rm -rf "Adrian Sherwood/[1996] Roots Of Innovation - 15 And X Years On-U Sound"
rm -rf "Adrian Sherwood/[1998] Adrian Sherwood Presents the Master Recordings"
rm -rf "Adrian Sherwood/[2002] Chainstore Massacre"
rm -rf "Adrian Sherwood/[2003] Never Trust A Hippy"
xargs: guillemets simple non appairés ; par défaut les guillemets sont particuliers à xargs à moins d'utiliser l'option -0
Assez varié comme résultat...
Par contre les dossier qui ressortent semble correspondent à la limite de taille...
Bonne soirée,
jb
Orange pressée // Ubuntu 22.04
Hors ligne
#9 Le 21/03/2012, à 23:12
- sputnick
Re : [Resolu] Supprimer dossier suivant le poid en ligne de commande
Copie colle ici meme la sortie de :
echo $SHELL
$SHELL -version
edit:J'oubliais : il faut lancer avant :
shopt -s globstar
Dernière modification par sputnick (Le 21/03/2012, à 23:19)
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#10 Le 21/03/2012, à 23:20
- chryslervert
Re : [Resolu] Supprimer dossier suivant le poid en ligne de commande
Bonsoir,
jbo@jbo-ubuntu:~$ echo $SHELL
/bin/bash
jbo@jbo-ubuntu:~$ $SHELL -version
GNU bash, version 4.2.8(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
Licence GPLv3+ : GNU GPL version 3 ou ultérieure <http://gnu.org/licenses/gpl.html>
Ceci est un logiciel libre ; vous être libre de le modifier et de le redistribuer.
Aucune garantie n'est fournie, dans la mesure de ce que la loi autorise.
Voilà.
Je ne vois pas trop comment vous aider mieux...
jb
Orange pressée // Ubuntu 22.04
Hors ligne
#11 Le 21/03/2012, à 23:41
- sputnick
Re : [Resolu] Supprimer dossier suivant le poid en ligne de commande
Je viens de tester sous Ubuntu Oneiric et j'ai pas ces problèmes avec
shopt -s globstar
printf '%s\n' -- **/*/ |
xargs -I% du -s "%" |
awk '{size=$1; if (size < 50){$1=""; gsub("(^ |/$)", ""); print "rm -rf \042"$0"\042"}}'
Que donne la sortie de
file "30 Ans DAgitation Musicale En France/30 Years Of Musical Insurrection In France CD 3 - 90s_ 1991_97"
ls -ld "30 Ans DAgitation Musicale En France/30 Years Of Musical Insurrection In France CD 3 - 90s_ 1991_97"
?
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#12 Le 22/03/2012, à 02:02
- chryslervert
Re : [Resolu] Supprimer dossier suivant le poid en ligne de commande
Bonsoir,
jbo@jbo-ubuntu:~/Musique$ file "30 Ans DAgitation Musicale En France/30 Years Of Musical Insurrection In France CD 3 - 90s_ 1991_97"
30 Ans DAgitation Musicale En France/30 Years Of Musical Insurrection In France CD 3 - 90s_ 1991_97: ERROR: cannot open `30 Ans DAgitation Musicale En France/30 Years Of Musical Insurrection In France CD 3 - 90s_ 1991_97' (No such file or directory)
jbo@jbo-ubuntu:~/Musique$ ls -ld "30 Ans DAgitation Musicale En France/30 Years Of Musical Insurrection In France CD 3 - 90s_ 1991_97"
ls: impossible d'accéder à 30 Ans DAgitation Musicale En France/30 Years Of Musical Insurrection In France CD 3 - 90s_ 1991_97: Aucun fichier ou dossier de ce type
Pourtant il existe bien:
/home/jbo/Musique/30 Ans D'Agitation Musicale En France/30 Years Of Musical Insurrection In France CD 3 - 90's_ 1991_97
jbo@jbo-ubuntu:~/Musique$ shopt -s globstar
jbo@jbo-ubuntu:~/Musique$ printf '%s\n' -- **/*/ |
> xargs -I% du -s "%" |
> awk '{size=$1; if (size < 50){$1=""; gsub("(^ |/$)", ""); print "rm -rf \042"$0"\042"}}'
rm -rf "2 Badcard/[1995] Hustling Ability"
xargs: guillemets simple non appairés ; par défaut les guillemets sont particuliers à xargs à moins d'utiliser l'option -0
Par contre, j'ai peut-être un élément important qui me vient à l'esprit. Je ne pensais pas que cela aurait un importance... Mais pourquoi pas:
> j'ai placé ma discographie sur un disque dur externe, monté automatiquement dans "Musique".
Voici le code que j'ai utilisé (cf fstab):
# mes répertoires liés
UUID=3A26-2D3D /media/GranDaddy vfat defaults,umask=0 0 0
/media/GranDaddy/Musique /home/jbo/Musique vfat bind 0 0
Je ne sais pas si cela peut avoir une incidence.
Bonne soirée,
jb
Orange pressée // Ubuntu 22.04
Hors ligne
#13 Le 22/03/2012, à 02:41
- sputnick
Re : [Resolu] Supprimer dossier suivant le poid en ligne de commande
Le problème était les apostrophes pipés dans xargs, donc :
maxsize=50 # taille maximum des répertoires en Ko
find -type d -exec du -s {} \; |
awk -vmaxsize=$maxsize '{size=$1; if (size < maxsize) {$1=""; gsub("(^ |/$)", ""); print "rm -rf \042"$0"\042"}}'
Dernière modification par sputnick (Le 22/03/2012, à 02:43)
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#14 Le 22/03/2012, à 10:33
- chryslervert
Re : [Resolu] Supprimer dossier suivant le poid en ligne de commande
Super Sputnick.
Ca semble fonctionner.
Et sans
shopt -s globstar
qui correspond à quoi?
Du coup, je copie-coller ces ligne dans un fichier sh (disons music-cleaner.sh) que je rends exécutable.
Puis je lance
bash music-cleaner
pour automatiser cela à l'avenir?
En bonus, si je souhaite pouvoir choisir la taille limite lors de l'execution du script: par exemple passer maxsize à 100?
En tout cas, merci beaucoup pour ce coup de pouce.
Bonne journée,
jb
Orange pressée // Ubuntu 22.04
Hors ligne
#15 Le 22/03/2012, à 19:45
- sputnick
Re : [Resolu] Supprimer dossier suivant le poid en ligne de commande
shopt -s globstar
C'est pour pouvoir utiliser la récursivité avec ** avec les globs bash
Du coup, je copie-coller ces ligne dans un fichier sh (disons music-cleaner.sh) que je rends exécutable.
Puis je lancebash music-cleaner
pour automatiser cela à l'avenir?
Tout à fait.
En bonus, si je souhaite pouvoir choisir la taille limite lors de l'execution du script: par exemple passer maxsize à 100?
Pour cela, tu peux passer un argument :
#!/bin/bash
# codé par sputnick 20120322
if ! [[ $1 =~ ^[0-9]+$ ]]; then
echo >&2 "Usage: $0 <int maxsize>"
exit 1
fi
maxsize=$1 # taille maximum des répertoires en Ko donné en argument
find -type d -exec du -s {} \; |
awk -vmaxsize=$maxsize '{
size=$1
if (size < maxsize) {
$1=""
gsub("(^ |/$)", "")
print "rm -rf \042"$0"\042"
}
}'
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#16 Le 22/03/2012, à 20:32
- chryslervert
Re : [Resolu] Supprimer dossier suivant le poid en ligne de commande
Merci sputnick pour le bonus.
Apparemment, j'ai du faire une petite erreur car il ne semble plus que lister les dossiers en question:
jbo@jbo-ubuntu:~/Musique$ bash music-cleaner.sh
Usage: music-cleaner.sh <int maxsize>
jbo@jbo-ubuntu:~/Musique$ bash music-cleaner.sh 50
rm -rf "./Various Artists/Disco Discharge/Disco Discharge. Diggin' Deeper"
rm -rf "./Various Artists/The Celluloid Years/The Celluloid Years (cd1)"
rm -rf "./Various Artists/The Celluloid Years/The Celluloid Years (cd2)"
rm -rf "./Winston Jarrett & The Righteous Flames"
Il y a sans doute un truc qu'il faut que je comprenne avec le bash...
Reste le choix du dossier à la volée, que je me réserve comme petit exercice.
Merci beaucoup,
jb
Orange pressée // Ubuntu 22.04
Hors ligne
#17 Le 22/03/2012, à 22:10
- sputnick
Re : [Resolu] Supprimer dossier suivant le poid en ligne de commande
C'est parce qu'il n'y a pas
| bash
à la fin.
Nouvelle version avec en plus l'option -n pour tester et rien pour effacer.
#!/bin/bash
# codé par sputnick 20120322
if ! [[ $1 =~ ^[0-9]+$ ]]; then
echo >&2 -e "Usage:\n\t$0 <int maxsize> [<-n>]\n\t-n no action"
exit 1
fi
[[ $@ == *-n* ]] || dry_run=1
maxsize=$1 # taille maximum des répertoires en Ko donné en argument
find -type d -exec du -s {} \; |
awk -vmaxsize=$maxsize -vdry_run=$dry_run '{
size=$1
if (size < maxsize) {
$1=""
gsub("(^ |/$)", "")
if (dry_run) {
system("rm -rf \042"$0"\042")
}
else {
print "rm -rf \042"$0"\042"
}
}
}'
Dernière modification par sputnick (Le 22/03/2012, à 22:20)
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#18 Le 22/03/2012, à 23:58
- chryslervert
Re : [Resolu] Supprimer dossier suivant le poid en ligne de commande
Là, c'est grand luxe...
Merci beaucoup sputnick.
Maintenant reste à comprendre un peu comme cela fonctionne.
Enfin, tout est propre et je suis ravi.
Bonne soirée,
jb
Orange pressée // Ubuntu 22.04
Hors ligne
#19 Le 23/03/2012, à 00:09
- sputnick
Re : [Resolu] Supprimer dossier suivant le poid en ligne de commande
Maintenant reste à comprendre un peu comme cela fonctionne.
Renseigne toi et reviens ver moi (nous) si t'a des questions.
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne