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

1071
Richard

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

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

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" будут иметь одинаковый размер файла, если это поможет.

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

0

2 ответа на вопрос

2
Kusalananda

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

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

Если только «-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 

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

Похожие вопросы