Шаблон соответствия файла в командной строке?

Шаблон соответствия файла в командной строке?

Может ли кто-нибудь помочь мне с относительно сложным шаблоном сопоставления файлов в командной строке?

У меня есть файлы в следующем каталоге:

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

Я хочу перечислить все файлы, у которых нет копии с таким же именем файла -1где-то в нем. Так что в примере выше результаты будут 3.png.

Примечание: файл и его копия с «-1» внутри будут иметь одинаковый размер, если это поможет.

Может ли кто-нибудь подсказать, как это сделать?

решение1

Предполагая, что все файлы с -nявляются копиями и что вам не нужны большие пальцы, это работает в KornShell (ksh), а также в Bash с extglobустановленной опцией ( shopt -s extglob):

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

решение2

Если только "-1" определяет, что это копия, то у вас нет копии файлов 2-1.png или 2-1_thumb.png. Если это ваш критерий соответствия и вы хотите также проверить большие пальцы, вы можете сделать

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

В противном случае, если большие пальцы не в счет, ответ KAK должен подойти

Связанный контент