Поиск определенных изображений PNG и их переименование

Думаю, так и будет:

cd your_source_dir || exit

for file in *; do
  if [[ $(echo "$file" | grep -Pw "[a-z]{4}[0-9]{4}") ]]; then
    dir="${file:0:4}"
    [[ -d "$dir" ]] || mkdir "$dir"
    [[ -f "$file"]] && mv "$file" "$dir/"
  fi
done
1
14.10.2021, 14:23
1 ответ

Предполагая, что ваша команда findнаходит именно те файлы, которые вы хотите переименовать, вы можете переименовать их, вызвав mvиз findс помощью -execdirследующим образом:

find. -name logo.png -size 56431c -execdir mv {} oldlogo.png \;

Предикат -execdirне является стандартным -, но часто используется. Он выполняет данную утилиту в каталоге, где было найдено имя, с заменой {}именем файла (GNU findдобавит ./к имени файла, в то время как другие реализации findмогут этого не делать. что ). В приведенной выше командемы используем этот факт, чтобы переименовать файл logo.pngв oldlogo.pngбез указания пути к каталогу.

Используя стандарт find, вы можете сделать это вместо этого:

find. -name logo.png -size 56431c -exec sh -c '
    for pathname do
        mv "$pathname" "${pathname%/*}/oldlogo.png"
    done' sh {} +

Приведенный выше вызов вызовет sh -cс путями пакетов найденных файлов. Сценарий строки -будет перебирать заданный пакет имен путей и переименовывать каждый из них в oldlogo.pngв том же каталоге, где он был найден find. Подстановка параметра ${pathname%/*}удалит последний /и все после него из значения $pathname(, так что он действует как dirname "$pathname"в том смысле, что он возвращает часть каталога пути ).

2
14.10.2021, 14:41

Теги

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