Предполагая, что все файлы с -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
Может кто-нибудь помочь мне с относительно сложным шаблоном сопоставления файлов в командной строке?
У меня есть файлы в каталоге следующим образом:
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" будут иметь одинаковый размер файла, если это поможет.
Кто-нибудь может подсказать, как это сделать?
Предполагая, что все файлы с -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
Если только «-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
В противном случае, если большие пальцы не в счет, ответ КАК должен подойти