Сайт | Скачать | Видео | Wiki

Автор Тема: Массовое переименование  (Прочитано 623 раз)

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

Оффлайн I-Jurij

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 450
  • Репутация: +16/-0
Массовое переименование
« : 07 Февраль 2016, 23:56:56 »
Есть много файлов, у которых требуется убрать расширение.
Делал так
1 rename 's/.xmc/ /g' *.xmc2 и так rename 's/.xmc/ /g' *3 и find . -name "*.xmc" -print | rename 's/.xmc/ /g'4 и for i in *.xmc;
do mv $i `basename $i xmc`""`;
и ничего не переименовал,
потом убил все с помощью#!/bin/sh
j=0;
for i in *.xmc;
do let j+=1;
mv $i *.;
done
(имя-то жестко указал)
ЧЯДНТ в 1-4?

Оффлайн ander

  • Активный участник
  • Старожил
  • ****
  • Сообщений: 300
  • Репутация: +16/-0
Re:массовое переименование
« Ответ #1 : 08 Февраль 2016, 00:58:23 »
В 4 варианте почти правильно.  Должно быть
for i in *.xmc;  do mv $i `basename $i .xmc`; done(тело цикла обрамляется do ...; done, у basename расширение указывается вместе с точкой)
в цикле можно и просто mv $i ${i%.xmc}

А что до первых трех вариантов - вы будете смеяться, но о существовании команды rename узнал только сегодня :D

UPD.
Почитал маны на rename.  Их оказалось несколько, малость различающихся.
Вы пытались работать по варианту rename <perlexpr> <files>, такие тоже бывают, но установленный в pra вариант выдает
Usage:
 rename [options] <expression> <replacement> <file>...
То есть его надо использовать как rename .xmc '' *.xmc
C find вроде бы ни один из вариантов не сработает, так как со стандартного ввода имена не принимает.
С ним можно разве что так:
find . -name "*.xmc" -print | while read i; do mv $i ${i%.xmc}; done
Ну и напоследок генератор тренировочных файлов, чтобы нужное не убивать:
mkdir tst
cd tst
for i in `seq 1 100`; do touch file$i.xmc ; done

« Последнее редактирование: 08 Февраль 2016, 01:28:13 от ander »

Оффлайн I-Jurij

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 450
  • Репутация: +16/-0
Re:массовое переименование
« Ответ #2 : 08 Февраль 2016, 11:28:11 »
Спасибо, буду дальше пробовать.