Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Нужна помощь в пакетном переименовании файлов  (Прочитано 5364 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ShadowBurn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 37
    • Просмотр профиля
есть куча файлов с именами xxxx-xx-xx.log.out
нужно их переименовать в xxxx-xx-xx.log
файлов более 3500, ручками не катит =)
все действия только в консоли, т.к. работа удаленная, по SSH
поиск по "пакетное переименование файлов" приводит либо к гуевым утилитам, либо на непонятный мне скрипт.
Jazz, Blues & Rock'n'Roll фарева!

Besogon

  • Гость
сам не пробовал, но нашел: (если ты в Perl шаришь)
man rename
Сори. Лучше попробуй.
http://tuxedo-live.blogspot.com/2007/07/mmv.html
« Последнее редактирование: 07 Апреля 2009, 19:06:36 от Besogon »

Оффлайн ShadowBurn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 37
    • Просмотр профиля
Не выходит
Дело осложняется знаком # в именах файлов.
Вот один из них для примера  GM_#286_2009-03-15_13-55-03.log.out
Из него надо получить  GM_#286_2009-03-15_13-55-03.log
Jazz, Blues & Rock'n'Roll фарева!

Оффлайн Shecspi

  • Активист
  • *
  • Сообщений: 386
  • Launch Hip-Hop
    • Просмотр профиля
    • PHP-GTK по-русски
Если имеется PHP, то можно так:
<?php

$path 
glob ('*.log.out');

foreach ( 
$path as $filename )
    
rename $filenamepreg_replace ('|(.+?).log.out|''\\1.log'$filename ) );

?>



Оффлайн serwiz

  • Участник
  • *
  • Сообщений: 172
    • Просмотр профиля
    • DvinaWeb
мне когда-то очень помогла программка mmv.
Цитировать
sudo apt-get install mmv
В гугле по запросу переименование файлов mmv найдете примеры. Ну и man естественно...
Пессимист видит трудности при каждой возможности; оптимист в каждой трудности видит возможности. У. Черчилль

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Нужна помощь в пакетном переименовании ф&
« Ответ #5 : 07 Апреля 2009, 20:10:04 »
Код: (bash) [Выделить]
ls *.out | while read; do mv "$REPLY" `basename "$REPLY" .out`; done
ps
Чего-то через xargs -i `basename '{}' .out` не получилось.
« Последнее редактирование: 07 Апреля 2009, 20:14:17 от ArcFi »

Оффлайн ShadowBurn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 37
    • Просмотр профиля
ArcFi, спасибо, проблема решена вашим методом.
Jazz, Blues & Rock'n'Roll фарева!

Оффлайн tremor

  • Участник
  • *
  • Сообщений: 212
  • Промышляю локальными сетями
    • Просмотр профиля
    • Компьютерные сети в Екатеринбурге
Нифига себе, что то я отстал. А откуда переменная $REPLAY берется?   :idiot2:
И я так понимаю что если файл был вида xxxx-xx-xx.log.out , то станет он вида: xxxx-xx-xx.log.out.log?

Оффлайн ShadowBurn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 37
    • Просмотр профиля
Нет, стал именно xxxx-xx-xx.log
Jazz, Blues & Rock'n'Roll фарева!

Оффлайн tremor

  • Участник
  • *
  • Сообщений: 212
  • Промышляю локальными сетями
    • Просмотр профиля
    • Компьютерные сети в Екатеринбурге
Кто нибудь может обьяснить как оно работает? Действительно интересно, и непонятно.

PS Вот как сделал я переименование файлов мп3 из верхнего регистра в нижний а то exaile не читает:

ls ./* | while read I; do a=`echo "$I" | sed 's/MP3/mp3/'`; cp "$I" "$a";done

Мне понятна эта схема, но ваша - нет. И ваша короче и волшебнее, обьясните пожалуйста ))
« Последнее редактирование: 07 Апреля 2009, 21:48:47 от tremor »

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Нужна помощь в пакетном переименовании ф&
« Ответ #10 : 08 Апреля 2009, 00:12:37 »
tremor, а чего там непонятного?
Про pipe, read и while написано в man bash, про basename -- в man basename. =)
read без параметров сохраняет в REPLY.
« Последнее редактирование: 08 Апреля 2009, 00:16:44 от ArcFi »

Оффлайн tremor

  • Участник
  • *
  • Сообщений: 212
  • Промышляю локальными сетями
    • Просмотр профиля
    • Компьютерные сети в Екатеринбурге
Да почитал маны, все верно. Про $REPLAY что то не вышло по умолчанию туда сохранится )), хотя я так и подумал что это встроенная переменная, щас еще попробую. А так вот тема интересная по отбрасыванию Директорий и Суффиксов из имен файлов разными способами, оказывается есть true bash way:
http://stackoverflow.com/questions/125281/how-do-i-remove-the-file-suffix-and-path-portion-from-a-path-string-in-bash

Ну вот попробовал щас на работе на слаке: ls | while read; do echo $REPLAY; done --- выдает пустые строки (экран просто на 10 строчек пролистнулся), дома на убунте тоже самое было вчера.
« Последнее редактирование: 08 Апреля 2009, 08:31:01 от tremor »

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
tremor, REPLY, не REPLAY )

Оффлайн tremor

  • Участник
  • *
  • Сообщений: 212
  • Промышляю локальными сетями
    • Просмотр профиля
    • Компьютерные сети в Екатеринбурге
 :-[ фу блин, все ошибки от невнимательности, спасибо ))

Оффлайн Nebulosa

  • Активист
  • *
  • Сообщений: 397
    • Просмотр профиля
В академических целях  :coolsmiley:

Задачу бы решил так:
for k in `ls *.out`; do mv "$k" "${k%.out}"; done
Почитать по теме - http://www.opennet.ru/docs/RUS/bash_scripting_guide/x4462.html#RFE

 

Страница сгенерирована за 0.017 секунд. Запросов: 19.