Bonjour,
Peut-on utiliser des commandes de base pour trouver les noms des répertoires NE contenant PAS un fichier particulier (plus précisément un fichier avec une extension particulière, pas c'est pareil) ?
Le but étant de trouver parmi des centaines de répertoires, ceux qui ne contiennent pas de playlist .m3u.
Merci.
# solution
Posté par Putifuto . Évalué à 4.
# Création de la liste des répertoires contenant '*m3u' à partir du répertoire courant
find . -name '*.m3u' | xargs -l dirname | uniq > mylist.txt
# Création de la liste de tous les répertoires à partir du répertoire courant
du . | cut -f2 > all_dir.txt
# On ne garde que les répertoires n'étant pas dans les 2 fichiers
cat all_dir.txt mylist.txt | sort | uniq -u
[^] # Re: solution
Posté par dguihal . Évalué à 4.
find . -type d -exec sh -c 'ls $1 | grep -q "m3u$"' '{}' '{}' ';' -print
[^] # Re: solution
Posté par TalvinS . Évalué à 3.
[^] # Re: solution
Posté par dguihal . Évalué à 4.
L'intelligence collective de bouchot a fini par pondre ceci :
find . -type d -exec sh -c 'ls -x "$1" | grep -vq "m3u\b"' {} {} \; -print
[^] # Re: solution
Posté par Putifuto . Évalué à 2.
[^] # Re: solution
Posté par Putifuto . Évalué à 2.
fonctionne avec les noms avec espaces.
[^] # Re: solution
Posté par TalvinS . Évalué à 1.
En plus, pas de caractères accentés (contrairement à la longue soluce)
[^] # Re: solution
Posté par dguihal . Évalué à 2.
Testé sur une RHEL 4
[^] # Re: solution
Posté par TalvinS . Évalué à 1.
[^] # Re: solution
Posté par TalvinS . Évalué à 1.
[code]ls -ax "$1" | grep -vq "m3u\b"[/code]
ça ne donne rien.
Si j'enlève le --quiet ça donne les lignes qui ne contiennent pas de m3u.
[^] # Re: solution
Posté par dguihal . Évalué à 2.
[^] # Re: solution
Posté par TalvinS . Évalué à 1.
Donc, en tant que deboggeur des soluces que l'on me propose, cette modif fonctionne :
find . -type d ! -exec bash -c 'ls -ax "$1" | grep -q "m3u\b"' {} {} \; -print
Pourtant grep -v fonctionne très bien sous cygwin. M'enfin...
Reste que les caractères accentués ne sont pas pris en charge.
[^] # Re: solution
Posté par TalvinS . Évalué à 4.
Je n'avais pas pensé à faire ainsi : j'essayais de bourriner avec seulement avec find...
Par contre, légère modif à apporter car le nom des rep n'est pas toujours bon (par exemple ./1 Giant Leap pose problème).
En plus c'est plus court (mais pas forcément plus rapide) :
find . -name '*.m3u' -exec dirname {} \; > mylist.txt
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.