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 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 hmm

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 lance

bash 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. smile

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

chryslervert a écrit :

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