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


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

Автор Тема: Переименовать файлы в зависимости от их типа  (Прочитано 796 раз)

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

Оффлайн ShadowBurn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 37
    • Просмотр профиля
Здравствуйте.
Есть куча файлов вида file.0, file.1 и т.д. Необходимо переименовать файлы в зависимости от сигнатуры в начале файла. Т.е. если там PK, то делаем file.0.zip, Rar в file.0.rar и т.п.

Приблизительно представляю, что результаты grep Rar * можно подставить в mv посредством xargs, но правильно сделать это пока не получилось.
Jazz, Blues & Rock'n'Roll фарева!

andrey_p

  • Гость
Re: Переименовать файлы в зависимости от их типа
« Ответ #1 : 04 Сентября 2012, 06:29:59 »
Набросок (не тестировался):

for f in *; do
  type=`file "$f"`
  case "$type" in
    *zip*) mv "$f" "${f%?}"zip ;;
    *rar*) mv "$f" "${f%?}"rar ;;
    *)     echo SKIP: "$f"     ;;
  esac
done
« Последнее редактирование: 04 Сентября 2012, 11:15:20 от yazu »

izamoo

  • Гость
Re: Переименовать файлы в зависимости от их типа
« Ответ #2 : 04 Сентября 2012, 13:56:42 »
Набросок (не тестировался):

for f in *; do
  type=`file "$f"`
  case "$type" in
    *zip*) mv "$f" "${f%?}"zip ;;
    *rar*) mv "$f" "${f%?}"rar ;;
    *)     echo SKIP: "$f"     ;;
  esac
done

Прокомментируйте  пожалуйста это выражение:
${f%?}
Пользователь решил продолжить мысль 04 Сентября 2012, 13:59:09:
а теперь прикиньте что у человека 1000 файлов. И что, он будет каждый раз тыркать (т.е. делать выбор)? Может я что то не понимаю? Не пинайте сильно. :)
« Последнее редактирование: 04 Сентября 2012, 13:59:09 от izamoo »

andrey_p

  • Гость
Re: Переименовать файлы в зависимости от их типа
« Ответ #3 : 04 Сентября 2012, 17:46:36 »
Цитировать
Может я что то не понимаю?
f=file.1
echo "${f%?}zip"

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: Переименовать файлы в зависимости от их типа
« Ответ #4 : 04 Сентября 2012, 18:53:15 »
Тогда, наверное, надо   mv "$f" "${f}".zip
Делюсь знаниями, но их у меня мало!

andrey_p

  • Гость
Re: Переименовать файлы в зависимости от их типа
« Ответ #5 : 05 Сентября 2012, 08:40:23 »
Это работает:

for f in *; do   
  type=`file "$f"`
  case "$type" in
    *Zip*) mv -v "$f" "${f%.*}".zip ;;
    *RAR*) mv -v "$f" "${f%.*}".rar ;;
    *)     echo SKIP: "$f"     ;;
  esac
done

izamoo

  • Гость
Re: Переименовать файлы в зависимости от их типа
« Ответ #6 : 05 Сентября 2012, 12:17:20 »
${f%?}
Прокоментируйте как это работает, пожалуйста. Что за знак прцента и знак вопроса?

andrey_p

  • Гость
Re: Переименовать файлы в зависимости от их типа
« Ответ #7 : 05 Сентября 2012, 16:37:30 »
${f%?}
Прокоментируйте как это работает, пожалуйста. Что за знак прцента и знак вопроса?


info bash --index-search 'Parameter expansion'

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: Переименовать файлы в зависимости от их типа
« Ответ #8 : 06 Сентября 2012, 15:15:06 »
Код: (bash) [Выделить]
me@my:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.04
DISTRIB_CODENAME=lucid
DISTRIB_DESCRIPTION="Ubuntu 10.04.4 LTS"
me@my:~$ info bash --index-search 'Parameter expansion'
для `Parameter expansion' не найдено вхождений в именном указателе
me@my:~$

— в разных версиях Убунты маны отличаютя  >:(

У меня вот надо просто набрать   man bash   или   info bash   и вручную искать   parameter expansion.
Делюсь знаниями, но их у меня мало!

 

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