Dateianpassungsmuster in der Befehlszeile?

1126
Richard

Kann mir jemand mit einem relativ komplexen Kommandozeilenmuster helfen?

Ich habe Dateien in einem Verzeichnis wie folgt:

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, an denen sich keine Kopie mit demselben Dateinamen befindet -1. Im obigen Beispiel wären die Ergebnisse also 3.png.

Hinweis: Die Datei und ihre Kopie mit "-1" haben die gleiche Dateigröße, falls dies hilfreich ist.

Kann jemand vorschlagen, wie das geht?

0

2 Antworten auf die Frage

2
Kusalananda

Vorausgesetzt, dass alle Dateien -neine Kopie sind und Sie auch keine Daumen haben 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=$-1.png test -f $g || echo $f done 
0
OldWolf

Wenn nur "-1" bestimmt, dass es sich um eine Kopie handelt, haben Sie auch keine Kopie Ihrer Dateien 2-1.png oder 2-1_thumb.png. Wenn dies Ihre Übereinstimmungskriterien ist und Sie möchten, dass die Daumen ebenfalls getestet werden, können Sie dies 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 

Andernfalls, wenn die Daumen nicht zählen, sollte die Antwort von KAK passen