Может ли кто-нибудь помочь мне с относительно сложным шаблоном сопоставления файлов в командной строке?
У меня есть файлы в следующем каталоге:
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 должен подойти