Linux: Перейменуйте кілька зображень після батьківського каталогу та додайте суфікс (пакетний)


0

У мене є каталог зображень із значно більшою кількістю підкаталогів, які містять зображення із, скажімо, випадковими іменами.

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, який я можу виконати з зображень / застосувати їх на всіх підручниках одночасно.


Зверніть увагу, що superuser.com - це не безкоштовна послуга написання сценарію / коду. Якщо ви скажете нам, що ви намагалися до цього часу (включіть сценарії / код, який ви вже використовуєте) і де ви застрягли, то ми можемо спробувати допомогти у вирішенні конкретних проблем. Ви також повинні прочитати Як мені поставити гарне запитання? .
DavidPostill

Відповіді:


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)

Дякую. Це, здається, працює, але він також перейменовує сам сценарій у ".-1.sh"
johnny538

також кожен раз, коли я запускаю його, 1 файл видається видаленим.
johnny538

Привіт, сам сценарій не повинен був знаходитись у структурі каталогу, де файли перейменовані, він повинен зберігатися десь в іншому місці. Але для перейменування, наприклад, лише файлів "jpg", може бути доданий додатковий пункт.
tonioc
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.