J'essaye de trier mes fichiers par dossier pour cela je liste mes fichiers pour créer mes dossier comsuit :
ls | awk -F- '{print $1}
resultat :
Alfredo Guitierrez
Aniceto Molina
Celmira Jimenez
Cheche Mendoza
Gabriel Romero
Gerardo Cardenas
Herman Hernandez
Si j'introduit ceci dans une boucle "for in do done", l'entrée est traitée avec chaque mot rencontrée et non pas par ligne .....
for i in `ls | awk -F- '{print $1}'` ; do echo "${i}" ; done ;
resultat :
Alfredo
Guitierrez
Aniceto
Molina
Dans ce cas il m'est impossible de remplacer echo par mkdir dans ma boucle ...
Comment puis je faire ?
D'avance Merci
# IFS : modifier le separateur par defaut
Posté par NeoX . Évalué à 2.
un simple IFS='\n' (pour couper au changement de ligne plutot qu'a l'espace) au debut du script devrait faire que for prenne ligne par ligne et non pas mot à mot
sinon il me semble qu'il doit y avoir une option à awk
car lui aussi risque d'etre impacter par le changement de l'IFS quand il calcule ses colonnes (print $1) => affiche la premiere colonne
[^] # Re: IFS : modifier le separateur par defaut
Posté par dubis . Évalué à 1.
IFS='\' ;for i in `ls | awk -F- '{print $1}'` ; do echo "${i}" ; done ;
Pour le mkdir j'ai encore des soucis :
IFS='\' ;for i in `ls | awk -F- '{print $1}'` ; do mkdir `echo ${i} | sed 's/\ /\\\ /'` ; done ;
Les répertoires ont un point d'intérogation dans leurs nom :
$ls
Beta ?Los Hispanos ?Los Mirlos ?Pastor
Brothers ?Lizandro Imperial ?Saboreo Molina ?Celmira
# ls ?
Posté par petit_bibi . Évalué à 3.
for i in * ; do echo "${i}" ; done ;
[^] # Re: ls ?
Posté par petit_bibi . Évalué à 2.
for i in * ; do [ -f "$i" ] && { echo "$i" ; } ; done
[^] # Re: ls ?
Posté par dubis . Évalué à 1.
Merci
[^] # Re: ls ?
Posté par NeoX . Évalué à 2.
et en faisant le awk sur le echo pour le passer à mkdir...
for i in * ; do [ -f "$i"] && { mkdir `echo "$i" | awk -F- '{print $1}'`; } ; done
à tester evidemment (en virant le mkdir et les ` )
[^] # Re: ls ?
Posté par dubis . Évalué à 1.
bash: [: « ] » manquant
bash: [: « ] » manquant
bash: [: « ] » manquant
bash: [: « ] » manquant
bash: [: « ] » manquant
bash: [: « ] » manquant
Je ne comprend pas l'expression do [ -f "$i"] ... Si quelqu'un peut m'en donner une ??
[^] # Re: ls ?
Posté par dubis . Évalué à 1.
La commande devient donc :
for i in *.mp3 ; do mkdir `echo "$i" | awk -F- '{print $1}'` ; done ;
Cela marche nickel
Merci pour tout
[^] # Re: ls ?
Posté par NBaH . Évalué à 2.
for i in * ; do [ -f "$i" ] && mkdir "${i%%-*}" ; done
[^] # Re: ls ?
Posté par petit_bibi . Évalué à 1.
[ -f "monfichier" ] retourne 0 si le fichier existe et n'est pas un répertoire.
Pour vérifier:
[ -f /etc/hosts ]
echo $?
Je n'ai jamais utilisé awk, je ne sais pas ce que fait -F- par exemple, à moins que ce ne soit la contraction de -F - ?
Donc s i je comprends bien tu as des fichiers MP3 qui son nommé de cette forme ?
Artiste - Titre - .. - .. .mp3 ?
Dans ce cas, tu peux virer les trucs après le premier '-' comme ça:
for c in *.mp3 ; do { echo "${c%%-*}" ; } ; done
# wala
Posté par zecrazytux (site web personnel) . Évalué à 1.
echo "$i";
done << EOF
$(ls | awk -F- '{print $1}')
EOF
# print $1
Posté par solsTiCe (site web personnel) . Évalué à 1.
si tu lui demande d'imprimer que le premier champ bin c'est ce qu'il va faire. point barre
print $0
ca devrait mieux marcher
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.