LINUX.ORG.RU

Рекурсивное переименование

 , ,


1

0

Надо мне рекурсивно переименовать файлы: есть файл «ориг_название_n_продолжение.png» и я хочу переименовать его в «open_n.png», причём важно чтобы n состоял из 4-х символов (с нулями в начале, как seq -w). Код напрашивается сам собой:

#!/bin/bash
for i in {0000..0093}; do 
mv /home/p/Загрузки/Downloads/rei_gif_frames/*.png "/home/p/Загрузки/Downloads/rei_gif_frames/part1/open_$i.png"; done

Но оно выводит

mv: указанная цель '/home/p/Загрузки/Downloads/rei_gif_frames/part1/open_0000.png' не является каталогом
mv: указанная цель '/home/p/Загрузки/Downloads/rei_gif_frames/part1/open_0001.png' не является каталогом
mv: указанная цель '/home/p/Загрузки/Downloads/rei_gif_frames/part1/open_0002.png' не является каталогом
mv: указанная цель '/home/p/Загрузки/Downloads/rei_gif_frames/part1/open_0003.png' не является каталогом

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

(Note: не люблю нагромождение 10 непонятных параметров с различными знаками, если можно сделайте пж пояснения или как проще — пускай и больше — ок?)

Upd: психанул и за 10 минут переименовал вручную. Желающие могут продолжить обсуждение

Upd2: воспользовался рекурсивным переименованием в thunar, когда мне это ещё раз понадобилось. Оно там простое, просто выделяете кучу файлов, нажимаете ПКМ -> Переименовать и дальше переименовываете под ваши нужды



Последнее исправление: Termik (всего исправлений: 7)

Ты дал команду «перенести все файлы из директории rei_gif_frames с расширением .png в каталог rei_gif_frames/part1/open_$i.png»

Обалдевший от такой тупизны шелл тебе ответил: указанная цель ‘rei_gif_frames/part1/open_0000.png’ не является каталогом.

Anoxemian ★★★★★
()

Пишу не проверяя, просто чтобы идею передать.

i=0
for f in /home/p/Загрузки/Downloads/rei_gif_frames/*.png
do
 mv "$f" "/home/p/Загрузки/Downloads/rei_gif_frames/part1/open_$i.png"
 i=$((i + 1))
done
Legioner ★★★★★
()
Ответ на: комментарий от Legioner

Всё бы ничего, вот только мне нужно чтобы номер состоял именно из четырёх символов. Логично было бы использовать seq -w 0000 0093, но я хз куда его прицепить

Termik
() автор топика

перемести нужные файлы в конечную директорию (part1)

затем используй

(p)rename ‘Правила переименования здесь’ *.png

я когда-то постил пример

Массовое переименование файлов. (комментарий)

futurama ★★★★★
()
Последнее исправление: futurama (всего исправлений: 1)
Ответ на: комментарий от futurama
  1. *Ничего* не понял, но очень интересно (серьёзно, трудно читать и понимать 100000 параметров)
  2. Скорее всего не сработает — в пути есть кириллица, rename такое не очень любит
Termik
() автор топика
Ответ на: комментарий от Termik

тебе не надо работать с полными путями, перейди в дир. и там работай локально. кроме того, нет у перла никаких проблем с кириллицей

futurama ★★★★★
()

Не хочу вдаваться в bash-скриптинг, там конечно же найдётся способ сделать правильно…

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

kirill_rrr ★★★★★
()
import glob
import os
import re

os.chdir("/home/p/Загрузки/Downloads/rei_gif_frames/")
num_extract=re.compile(r'.+_(\d+)_.+\.png')

for file in glob.glob("*.png"):
    file_number = num_extract.search(file).group(1)
    new_file_name = 'open_%s.png' % file_number.zfill(4)
    os.rename(file, new_file_name)
Ford_Focus ★★★★★
()
Последнее исправление: Ford_Focus (всего исправлений: 1)
Ответ на: комментарий от SpaceRanger

Чё-то прикол мне не понятен. Я всего лишь хотел замутить бут-анимацию (что успешно и сделал), но я не смог ей воспользоваться так как мне не удалось пропихнуть файл в каталог в партиции ro

Termik
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.