Dateiübereinstimmungsmuster auf der Befehlszeile?

Dateiübereinstimmungsmuster auf der Befehlszeile?

Kann mir jemand mit einem relativ komplexen Befehlszeilen-Dateiabgleichsmuster helfen?

Ich habe die folgenden Dateien in einem Verzeichnis:

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

Ich möchte alle Dateien auflisten, von denen es keine Kopie mit demselben Dateinamen gibt -1. Im obigen Beispiel wären die Ergebnisse also 3.png:

NB: Die Datei und ihre Kopie mit „-1“ darin haben die gleiche Dateigröße, falls das hilft.

Kann jemand einen Vorschlag machen, wie das geht?

Antwort1

Vorausgesetzt, dass alle Dateien -neine Kopie sind und Sie auch die Vorschaubilder nicht möchten, funktioniert dies in KornShell (ksh) und auch in Bash mit der 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

Antwort2

Wenn nur "-1" eine Kopie feststellt, dann haben Sie auch keine Kopie Ihrer Dateien 2-1.png oder 2-1_thumb.png. Wenn das Ihr Übereinstimmungskriterium ist und Sie auch die Vorschaubilder testen möchten, können Sie Folgendes tun:

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

Ansonsten, wenn die Daumen nicht zählen, sollte KAKs Antwort passen

verwandte Informationen