Удалите несколько файлов с regex

У меня есть папка с подпапками с теми же файлами, например:

 dsc_9660__content_w.jpg
 dsc_9660__content.jpg
 dsc_9660__h70.jpg
 dsc_9660__small.jpg
 dsc_9660.jpg

Суффикс - является различными размерами изображений.

Как удалить все файлы с суффиксом как это:__[a-zA-z0-9].(png|jpg|jpeg)?
И сохраните только исходные изображения без суффикса как dsc_9660.jpg в моем примере

3
задан 9 January 2015 в 06:25

3 ответа

Попробуйте , находят команда с -regex переключатель или -iregex (нечувствительный к регистру), изменяют Ваш regex на .*__[a-zA-z0-9_]*\.(png|jpg|jpeg) и используют -delete опция удалить подобранный файл:

find . -type f -regextype "posix-egrep" -iregex '.*__[a-zA-z0-9_]*\.(png|jpg|jpeg) 

можно использовать другие типы -regextype (который работается) вместо "posix-egrep" как:
"posix-расширенный" или "posix-awk".

-regex pattern
    File  name matches regular expression pattern.  This is a match on the whole path, not a search.  For
    example, to match a file named './fubar3', you can use the regular expression '.*bar.'  or '.*b.*3',
    but not 'f.*r3'. The regular expressions understood by find are by default Emacs Regular Expres‐
    sions, but this can be changed with the -regextype option.

-iregex pattern
    Like -regex, but the match is case insensitive.

-regextype type
    Changes the regular expression syntax understood by -regex and -iregex tests which occur later on the
    command line. Currently-implemented types are emacs (this is the default), posix-awk, posix-basic,
    posix-egrep and posix-extended.

-delete
    Delete files

В конце добавляют -delete переключатель для управления к удалению подобранных файлов:

find . -type f -regextype "posix-egrep" -iregex '.*__[a-zA-z0-9_]*\.(png|jpg|jpeg) <час> 
.*__[a-zA-z0-9_]*\.(png|jpg|jpeg)
  • .* соответствия все прежде __
  • __ двойные подчеркивания соответствий.
  • [a-zA-z0-9_]* соответствия все алфавитно-цифровые и одинарное подчеркивание _ символы. * средства этот класс символов может быть нулевой длиной.
  • \. соответствия единственная точка. Для соответствия точке (.) буквально, необходимо выйти из него в регулярном выражении с помощью обратной косой черты; без выхода это соответствует любому отдельному символу.
  • В эти (png|jpg|jpeg), пара круглых скобок делает его как группу соответствий. Будет соответствовать png или (|) jpg или jpeg.
  • $ привязка, соответствует концу строки (или имена файлов в этом случае)

Regular expression visualization

Демонстрация Debuggex и тест на файлах

<час> -delete
<час>
.*__[a-zA-z0-9_]*\.(png|jpg|jpeg)
  • .* соответствия все прежде __
  • __ двойные подчеркивания соответствий.
  • [a-zA-z0-9_]* соответствия все алфавитно-цифровые и одинарное подчеркивание _ символы. * средства этот класс символов может быть нулевой длиной.
  • \. соответствия единственная точка. Для соответствия точке (.) буквально, необходимо выйти из него в регулярном выражении с помощью обратной косой черты; без выхода это соответствует любому отдельному символу.
  • В эти (png|jpg|jpeg), пара круглых скобок делает его как группу соответствий. Будет соответствовать png или (|) jpg или jpeg.
  • $ привязка, соответствует концу строки (или имена файлов в этом случае)

Regular expression visualization

Демонстрация Debuggex и тест на файлах

<час>

можно использовать другие типы -regextype (который работается) вместо "posix-egrep" как:
"posix-расширенный" или "posix-awk".

-regex pattern
    File  name matches regular expression pattern.  This is a match on the whole path, not a search.  For
    example, to match a file named './fubar3', you can use the regular expression '.*bar.'  or '.*b.*3',
    but not 'f.*r3'. The regular expressions understood by find are by default Emacs Regular Expres‐
    sions, but this can be changed with the -regextype option.

-iregex pattern
    Like -regex, but the match is case insensitive.

-regextype type
    Changes the regular expression syntax understood by -regex and -iregex tests which occur later on the
    command line. Currently-implemented types are emacs (this is the default), posix-awk, posix-basic,
    posix-egrep and posix-extended.

-delete
    Delete files

В конце добавляют -delete переключатель для управления к удалению подобранных файлов:

find . -type f -regextype "posix-egrep" -iregex '.*__[a-zA-z0-9_]*\.(png|jpg|jpeg) <час> 
.*__[a-zA-z0-9_]*\.(png|jpg|jpeg)
  • .* соответствия все прежде __
  • __ двойные подчеркивания соответствий.
  • [a-zA-z0-9_]* соответствия все алфавитно-цифровые и одинарное подчеркивание _ символы. * средства этот класс символов может быть нулевой длиной.
  • \. соответствия единственная точка. Для соответствия точке (.) буквально, необходимо выйти из него в регулярном выражении с помощью обратной косой черты; без выхода это соответствует любому отдельному символу.
  • В эти (png|jpg|jpeg), пара круглых скобок делает его как группу соответствий. Будет соответствовать png или (|) jpg или jpeg.
  • $ привязка, соответствует концу строки (или имена файлов в этом случае)

Regular expression visualization

Демонстрация Debuggex и тест на файлах

<час> -delete
<час>
.*__[a-zA-z0-9_]*\.(png|jpg|jpeg)
  • .* соответствия все прежде __
  • __ двойные подчеркивания соответствий.
  • [a-zA-z0-9_]* соответствия все алфавитно-цифровые и одинарное подчеркивание _ символы. * средства этот класс символов может быть нулевой длиной.
  • \. соответствия единственная точка. Для соответствия точке (.) буквально, необходимо выйти из него в регулярном выражении с помощью обратной косой черты; без выхода это соответствует любому отдельному символу.
  • В эти (png|jpg|jpeg), пара круглых скобок делает его как группу соответствий. Будет соответствовать png или (|) jpg или jpeg.
  • $ привязка, соответствует концу строки (или имена файлов в этом случае)

Regular expression visualization

Демонстрация Debuggex и тест на файлах

<час>
4
ответ дан 17 November 2019 в 10:49

Попробуйте следующую команду:

cd <dir>
find . -type f -iname \*.jpg -delete

-type ----> введите тип файла (__ [a-zA-z0-9]. (Png | jpg | jpeg)) и использовать команду.

Надеюсь, это поможет.

-1
ответ дан 17 November 2019 в 10:49
cd <dir>
find . -type f -iname \*__*.jpg -delete
0
ответ дан 17 November 2019 в 10:49

Другие вопросы по тегам:

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