Modèle de correspondance de fichier en ligne de commande?


0

Quelqu'un peut-il m'aider avec un modèle de correspondance de fichier en ligne de commande relativement complexe?

J'ai des fichiers dans un répertoire comme suit:

1.png
1_thumb.png
1-1.png
1-1_thumb.png
1-2.png
1-2_thumb.png
2.png 
2_thumb.png
2-1.png
2-1_thumb.png
3.png
3_thumb.png
3-1_thumb.png

Je veux lister tous les fichiers qui n'ont pas de copie avec le même nom de fichier avec -1quelque part dedans. Ainsi, dans l'exemple ci-dessus, les résultats seraient 3.png.

NB: le fichier et sa copie avec "-1" seront de la même taille, si cela peut vous aider.

Quelqu'un peut-il suggérer comment faire cela?

Réponses:


2

En supposant que tous les fichiers avec -nsont une copie et que vous ne voulez pas les pouces non plus, cela fonctionne dans KornShell (ksh), ainsi que dans Bash avec l' extgloboption set ( shopt -s extglob):

for f in !(*_thumb.png|*-[1-9].png); do
  g=${f%.png}-1.png
  test -f $g || echo $f
done

0

Si seul "-1" détermine qu'il s'agit d'une copie, vous ne disposez pas non plus de copie de vos fichiers 2-1.png ou 2-1_thumb.png. Si ce sont vos critères de correspondance et que vous souhaitez que les pouces soient également testés, vous pouvez le faire.

for i in `ls |grep -v "\-1"  | cut -f1 -d.`; do 
    if `echo $i | grep thumb > /dev/null`; then 
        test -f `echo $i.png | sed 's/_/-1_/g'` || echo $i.png; 
    else 
        test -f $i-1.png || echo $i.png; 
    fi; 
done

Sinon, si les pouces ne comptent pas, la réponse de KAK devrait convenir

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.