Pattern di corrispondenza dei file sulla riga di comando?


0

Qualcuno può aiutarmi con un modello di corrispondenza dei file di riga di comando relativamente complesso?

Ho i file in una directory come segue:

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

Voglio elencare tutti i file che non hanno una copia con lo stesso nome di file con -1 da qualche parte. Quindi, nell'esempio sopra, i risultati sarebbero 3.png.

NB: il file e la sua copia con "-1" in esso saranno la stessa dimensione, se questo aiuta.

Qualcuno può suggerire come fare questo?

Risposte:


2

Supponendo che tutti i file con -n è una copia e non vuoi nemmeno i pollici, funziona in KornShell (ksh) e anche in Bash con extglob set di opzioni ( shopt -s extglob ):

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

0

Se è solo "-1" che determina che è una copia, allora non hai una copia del tuo 2-1.png o anche i file 2-1_thumb.png. Se questo è il tuo criterio di corrispondenza e vuoi anche i pollici testati, puoi farlo

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

Altrimenti, se i pollici non contano, la risposta KAK dovrebbe essere adatta

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.