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


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

Автор Тема: Возможноли массово поперемещать блооки названия файлов?  (Прочитано 1693 раз)

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

Оффлайн LoViK

  • Автор темы
  • Участник
  • *
  • Сообщений: 178
    • Просмотр профиля
добрый всем день. есть ситууация необходимо изменить названия файлов, поменяв местами некоторые блоки названия самих файлов?
для большего понимания опишу более подробно.
есть дохрена записей которые называются
out-305518426-1132-20151215-101315-1450167195.320676.waw
и мне необходимо переименовать их таким образорм чтобы второй блок 305518426 поменялося местами с третьим 1132, а чтоб остальное все сохранилось.
можноли каким либо скриптом или командой попереименовывать?

Оффлайн F12

  • Администратор
  • Старожил
  • *
  • Сообщений: 4478
    • Просмотр профиля
LoViK,
Double Commander умеет это делать ::)

Пользователь решил продолжить мысль 26 Декабря 2015, 11:31:40:
ну или почитай тут https://forum.ubuntu.ru/index.php?topic=99877.0
« Последнее редактирование: 26 Декабря 2015, 11:31:40 от F12 »

shura1

  • Гость
zsh - скрипт zmv, который идет в комплекте. Здесь можно посмотреть на все чудеса, которые можно творить. Раздел ZMV-examples. В твоем случае это было бы так
zmv '(*)(305518426)-(1132)(*)' '$1$3-$2$4'
Если zsh не является оболочкой по умолчанию, то можно использовать так (вроде - протестировал, но минимально)

zsh -c 'autoload zmv; zmv "$@"' -- -n  OLD NEW
Ключ -n означает тестирование - выводятся команды mv, но настоящего переименовывания не происходит.

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Ага, давайте ещё какую экзотику предложим при наличии штатных средств
Код: (bash) [Выделить]
prename -n 's/(\d+)-(\d+)/$2-$1/' out-*.wawили
Код: (bash) [Выделить]
while IFS=- read a first second b
do
    mv "$a-$first-$second-$b" "$a-$second-$first-$b"
done < <(ls out-*.waw)
на худой конец
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

shura1

  • Гость
Для меня эта не экзотика. Я уже лет 5 zsh пользуюсь и, соответственно, такой проблемы как массовое переименование/перемещение/копирование файлов любыми способами (любые имена в любые другие) и в любых местах (допустим в разных подкаталогах) у меня уже 5 лет нет. Как и многих других проблем.

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Jshura, Может тогда Вы сообщите какие «проблемы» у bash с переименованием файлов?
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

shura1

  • Гость
Никаких проблем у bash нет и быть не может. Проблемы возникают у людей, как у автора ОП. И в zsh их получается решать легче. Для меня.

PS Если действительно интересно, то могу сформулировать. Но, боюсь, все это может свестись к очередному - vim vs emacs, ubuntu vs arch и т.д, и т.п. Единственное, что хочу сказать, все плюсы zsh для меня в интерактивной работе. Скрипты я на шелл пишу небольшие, только для себя, и, как правило, для /bin/sh - не для bash, и не для zsh.

Оффлайн LoViK

  • Автор темы
  • Участник
  • *
  • Сообщений: 178
    • Просмотр профиля
попробовал все команды, но к сожалению к переименованию н иодна команда не привела.
zmv сказал что неизвестная команда, хотя zsh установлен.
пренейм и цикл тоже не сработали, ничего не вывели.
наверное надо более подробно написать ситуацию.
есть дофига файлов с разными названиями
(Нажмите, чтобы показать/скрыть)
формат названия всегда одинаковый.
направление(out)-номер-юзер-дата-время-ид.записи.вав
но номер и юзер могут иметь разные значения.
и вот мне нужно поменять местами юзер и номер, а все остальное оставить на прежних местах.



Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
out-305518426-1132-20151215-101315-1450167195.320676.waw
out-10550989548-1113-20151224-093354-1450942434.67396.wav
Код: (bash) [Выделить]
prename -n 's/(\d+)-(\d+)/$2-$1/' out-*.wav
Убрать -n для фактического выполнения переименования
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн LoViK

  • Автор темы
  • Участник
  • *
  • Сообщений: 178
    • Просмотр профиля
Azure,
Спасибо, действительно тупанул и не заметил.
все выполнилось. Еще раз большое спасибо

 

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