У меня есть каталог изображений со многими другими подкаталогами, которые содержат изображения с, скажем, случайными, именами файлов.

images/black-shoe/gsafdfs.jpg
images/black-shoe/ggdfgdf.jpg
images/black-shoe/gdfgd3f.jpg
images/black-shoe/g4twegd.jpg

images/red-shoe/ggsdgdfs.jpg
images/red-shoe/gskjhkhf.jpg
images/red-shoe/gsakytfs.jpg

И я хочу переименовать все изображения в их родительский каталог, но чтобы не допустить перезаписи одного изображения другим, добавьте суффикс следующим образом.

images/black-shoe/black-shoe-1.jpg
images/black-shoe/black-shoe-2.jpg
images/black-shoe/black-shoe-3.jpg
images/black-shoe/black-shoe-4.jpg

images/red-shoe/red-shoe-1.jpg
images/red-shoe/red-shoe-2.jpg
images/red-shoe/red-shoe-3.jpg

Я использую Debian 8 и знаком с использованием командной строки. В идеале я хотел бы, чтобы небольшой скрипт или oneliner, который я мог выполнить из изображений /, чтобы применить их ко всем подкаталогам сразу.

1 ответ1

0

Этот короткий скрипт должен помочь (имена файлов и каталогов могут содержать пробелы): (должен вызываться с параметром basedir)

#!/bin/bash

basedir=$1

while IFS= read -r -d '' path; 
do 
  dirn=$(basename "$path")
  echo "===> $path"
  let i=1
  while IFS= read -r -d '' fname; 
  do
    fext=$(echo "$fname" | awk -F '.' '{print $NF}')
    mv "$fname" "${path}/${dirn}-${i}.${fext}"
    let i=i+1
  done < <(find "$path" -maxdepth 1 -type f -print0)
done < <(find "$basedir" -type d -print0)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .