Как переименовать файлы? (задача из трех составляющих)

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

buzzie
Сообщения: 6

Как переименовать файлы?

Сообщение buzzie »

Привет всем


Прошу помощи у сообщества по таким вопросам:

Есть хостинг(линукс). Есть папки с файлами, файлов много, они большие.

1. Как из под шелла переименовать файлы следующим образом?: например был файл просто_файл.avi
нужно чтобы он стал просто_файл_[linuxforum.ru].avi то есть, просто к каждому названию файла дописать приставку _[linuxforum.ru]

2. Некоторые файлы на русском и с пробелами в названиях. Основной вопрос, как заменить пробелы на подчерк?

3. Можно ли без гимора сделать так, чтобы русские названия автоматом конвертнулись в транслит? Файлы создавались в винде (если это имеет значение)

Шелл bash

Помогите, для кого это не сложно
Спасибо сказали:
Аватара пользователя
BlackStar
Сообщения: 1338
Статус: We are all Kosh
ОС: Fedora 10

Re: Как переименовать файлы?

Сообщение BlackStar »

2. echo "Hello Wolrd" | sed -e 's/ /_/'
LightLang Team
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Как переименовать файлы?

Сообщение Uncle_Theodore »

1.

Код: Выделить всё

rename .avi _\[linuxforum.ru\].avi *avi
Спасибо сказали:
buzzie
Сообщения: 6

Re: Как переименовать файлы?

Сообщение buzzie »

BlackStar, Uncle_Theodore, спасибо за отклик....

Вы несколько переоценили мои познания, оставив эти конструкции без комментариев :)

echo "Hello Wolrd" | sed -e 's/ /_/'
Я понял что эта конструкция заменяет Hello World на тоже самое с подчерком. Если не сложно напишите что нужно ввести чтобы названия всех файлов в папке переименовать автоматом. Я сам такое к сожалению не осилю.

rename .avi _\[linuxforum.ru\].avi *avi
А эта команда вообще не хочет выполняться syntax error at (eval 1) line 1, near "."
И в ней хотелось бы сделать так, чтобы дописывать названия для всех файлов, с любым расширением, потому что есть и авишки и экзешники и пдф
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Как переименовать файлы?

Сообщение Uncle_Theodore »

Хм... Интересно, почему она у тебя не работает?

user@host

teddy@laptop~/test$ ls ashh.avi movie.avi serpent1.avi teddy@laptop~/test$ rename .avi _\[linuxforum.ru\].avi *avi teddy@laptop~/test$ ls ashh_[linuxforum.ru].avi serpent1_[linuxforum.ru].avi movie_[linuxforum.ru].avi

Ты так же делал?
Может, точки тоже заэкранировать?

user@host

teddy@laptop~/test$ ls ashh.avi movie.avi serpent1.avi teddy@laptop~/test$ rename \.avi _\[linuxforum\.ru\]\.avi *avi teddy@laptop~/test$ ls ashh_[linuxforum.ru].avi serpent1_[linuxforum.ru].avi movie_[linuxforum.ru].avi
Спасибо сказали:
buzzie
Сообщения: 6

Re: Как переименовать файлы?

Сообщение buzzie »

делал абсолютно также

Код: Выделить всё

[pacer]$ ls
GrandManInstall.exe  TTM.rar                               zapSetup_70_302_000_en.exe
Monopoly2006.avi     training_-_8_minute_Abs__fitness.rar
[pacer]$ rename .avi _\[linuxforum.ru\].avi *avi
syntax error at (eval 1) line 1, near "."
[pacer]$ rename \.avi _\[linuxforum\.ru\]\.avi *avi
syntax error at (eval 1) line 1, near "."
[pacer]$
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Как переименовать файлы?

Сообщение Uncle_Theodore »

buzzie писал(а):
08.05.2007 14:37
делал абсолютно также

Код: Выделить всё

[pacer]$ ls
GrandManInstall.exe  TTM.rar                               zapSetup_70_302_000_en.exe
Monopoly2006.avi     training_-_8_minute_Abs__fitness.rar
[pacer]$ rename .avi _\[linuxforum.ru\].avi *avi
syntax error at (eval 1) line 1, near "."
[pacer]$ rename \.avi _\[linuxforum\.ru\]\.avi *avi
syntax error at (eval 1) line 1, near "."
[pacer]$

Ты будешь смеяться, но я создал те же имена файлов, то и у тебя, и все работает...

Код: Выделить всё

teddy@laptop~/test$ ls
GrandManInstall.exe  training_-_8_minute_Abs__fitness.rar
Monopoly2006.avi     zapSetup_70_302_000_en.exe
TTM.rar
teddy@laptop~/test$ rename .avi _\[linuxforum.ru\].avi *avi
teddy@laptop~/test$ ls
GrandManInstall.exe               training_-_8_minute_Abs__fitness.rar
Monopoly2006_[linuxforum.ru].avi  zapSetup_70_302_000_en.exe
TTM.rar

Хм-хм-хм... Попробуй еще точку поставить

rename .avi _\[linuxforum.ru\].avi *.avi

А в этой Монополи, там в названии файла нет пробела в самом начале?
Спасибо сказали:
buzzie
Сообщения: 6

Re: Как переименовать файлы?

Сообщение buzzie »

похоже придется плакать, а не смеяться :)

название файла без пробелов и прочего...

попробовал последнюю вариацию - не идет.
увы. (( а другие варианты возможны? может с помощью awk? или перл...
к тому же задача стоит переименовывать все файлы а не с отдельным расширением... может в таком варианте глюка не будет?

а как посмотреть какая система работает кстати?
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Как переименовать файлы?

Сообщение Uncle_Theodore »

Попробуй так

Код: Выделить всё

 for ff in *.avi; do mv $ff ${ff%.avi}_\[linuxforum.ru\].avi; done


Код: Выделить всё

а как посмотреть какая система работает кстати?

в смысле?
Спасибо сказали:
Аватара пользователя
BlackStar
Сообщения: 1338
Статус: We are all Kosh
ОС: Fedora 10

Re: Как переименовать файлы?

Сообщение BlackStar »

Скрипт для второго пункта

Код: Выделить всё

#!/bin/bash

for f in *.avi; do

    FNAME=`echo $f | sed -e 's/ /_/'`
    echo "Rename $f to $FNAME"
    mv "$f" "$FNAME"

done;
LightLang Team
Спасибо сказали:
buzzie
Сообщения: 6

Re: Как переименовать файлы?

Сообщение buzzie »

Uncle_Theodore писал(а):
08.05.2007 15:31
Попробуй так

Код: Выделить всё

 for ff in *.avi; do mv $ff ${ff%.avi}_\[linuxforum.ru\].avi; done


Код: Выделить всё

а как посмотреть какая система работает кстати?

в смысле?


Эта конструкция работает! Можно ли ее заточить под все файлы, неважно с каким расширением?
Систему имел ввиду, какой дистрибутив работает на хостинге.

BlackStar писал(а):
08.05.2007 15:34
Скрипт для второго пункта

Код: Выделить всё

#!/bin/bash

for f in *.avi; do

    FNAME=`echo $f | sed -e 's/ /_/'`
    echo "Rename $f to $FNAME"
    mv "$f" "$FNAME"

done;


Тоже работает! Только удаляет первый пробел в названии файла, а остальные пробелы оставляет.
Т.е был файл 1 - Превед кросавчег.ogg, а стал 1_- Превед кросавчег.ogg
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Как переименовать файлы?

Сообщение diesel »

там sed -e 's/ /_/g' надо
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Как переименовать файлы?

Сообщение diesel »

как-то вот так еще можно, без sed'а
ls|while read i; do mv "$i" "${i// /_}"; done
если в именах файлов нет переносов строк, обычно нет :)
аналогично можно и с for сделать, если не запутаешься в кавычках :)
Спасибо сказали:
buzzie
Сообщения: 6

Re: Как переименовать файлы?

Сообщение buzzie »

diesel писал(а):
08.05.2007 16:20
как-то вот так еще можно, без sed'а
ls|while read i; do mv "$i" "${i// /_}"; done
если в именах файлов нет переносов строк, обычно нет :)
аналогично можно и с for сделать, если не запутаешься в кавычках :)

Это сработало. Спасибо :)

Спасибо Uncle_Theodore и BlackStar!
Спасибо сказали:
Аватара пользователя
nesk
Сообщения: 2268
Статус: Линукссаксовец
ОС: MS Windows XP Home SP3

Re: Как переименовать файлы?

Сообщение nesk »

может у вас разные версии rename?

попробуй так
rename s/.avi/_\[linuxforum.ru\].avi/ *.avi

в моем случае rename это симлинк на перловый скрипт /usr/bin/prename
так что можешь глянуть как оно работает
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.

0xDEFEC8ED
Спасибо сказали:
Аватара пользователя
*Sasha*
Сообщения: 2519
Статус: Мимо шёл
ОС: Debian

Re: Как переименовать файлы?

Сообщение *Sasha* »

diesel писал(а):
08.05.2007 16:20
ls|while read i; do mv "$i" "${i// /_}"; done

А можно как-то сделать чтоб, в подпапках тоже удоляло пробелы?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Как переименовать файлы?

Сообщение sash-kan »

*Sasha* писал(а):
08.05.2007 17:02
А можно как-то сделать чтоб, в подпапках тоже удоляло пробелы?
замени ls на

Код: Выделить всё

find . -type f
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Как переименовать файлы?

Сообщение diesel »

*Sasha* писал(а):
08.05.2007 17:02
А можно как-то сделать чтоб, в подпапках тоже удоляло пробелы?

можно, правда красивых вариантов в голову не приходит. вроде вот так вот работает(но не уверен):

find -iname *.mp3|while read i; do file=${i##*/}; mv "$i" "${i%%$file}${file// /_}"; done

либо сначала заменить пробелы в именах директорий, потом в именах файлов. тогда действительно ls на find меняем.
Спасибо сказали:
Аватара пользователя
nesk
Сообщения: 2268
Статус: Линукссаксовец
ОС: MS Windows XP Home SP3

Re: Как переименовать файлы?

Сообщение nesk »

по поводу транслита есть программка uniconv -encode Russian-Translit
из пакета yudit
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.

0xDEFEC8ED
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Как переименовать файлы?

Сообщение t.t »

Uncle_Theodore писал(а):
08.05.2007 13:21
rename .avi _\[linuxforum.ru\].avi *avi
Просто есть rename и rename (в смысле, названия одинаковые, а программы разные):

Код: Выделить всё

t:~/tmp$ touch Monopoly2006.avi
t:~/tmp$ rename .avi _\[linuxforum.ru\].avi *avi
syntax error at (eval 1) line 1, near "."
t:~/tmp$ rename 's/\.avi$/_\[linuxforum.ru\].avi/' *avi
t:~/tmp$ l *.avi
Monopoly2006_[linuxforum.ru].avi
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Как переименовать файлы?

Сообщение sash-kan »

diesel писал(а):
08.05.2007 17:27
либо сначала заменить пробелы в именах директорий
точно-точно. еще ведь и каталоги могут быть пробелами «продырявлены». тогда так:
find . | sort -r | while read i; do f=$(basename "$i"); $d=$(dirname "$i"); mv "$i" "$d/${f// /_}"; done
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
*Sasha*
Сообщения: 2519
Статус: Мимо шёл
ОС: Debian

Re: Как переименовать файлы?

Сообщение *Sasha* »

diesel писал(а):
08.05.2007 17:27
либо сначала заменить пробелы в именах директорий, потом в именах файлов. тогда действительно ls на find меняем.

Я заменил во всех файлах этим

Код: Выделить всё

find -iname *.mp3|while read i; do file=${i##*/}; mv "$i" "${i%%$file}${file// /_}"; done

А вот с папками что-то не выходит, так ничего не делает

Код: Выделить всё

find . -type f|while read i; do mv "$i" "${i// /_}"; done

а так говорит нет доступа, если от рута то перемещает всё в /

Код: Выделить всё

find . | sort -r | while read i; do f=$(basename "$i"); $d=$(dirname "$i"); mv "$i" "$d/${f// /_}"; done
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Как переименовать файлы?

Сообщение sash-kan »

*Sasha*, да, надо проверять, прежде чем советовать!

Код: Выделить всё

find . | sort -r | while read i; do f=$(basename "$i"); d=$(dirname "$i"); mv "$i" "$d/${f// /_}"; done
лишний доллар как-то затесался.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Как переименовать файлы?

Сообщение Uncle_Theodore »

t.t писал(а):
08.05.2007 18:44
Просто есть rename и rename (в смысле, названия одинаковые, а программы разные):

Ну да, я примерно так и подумал...
Но вообще-то странно. Как-то нехорошо получается.
Спасибо сказали:
pktfag
Сообщения: 142
ОС: Arch Linux

Re: Как переименовать файлы?

Сообщение pktfag »

buzzie писал(а):
08.05.2007 12:59
Привет всем
Прошу помощи у сообщества по таким вопросам:

Есть хостинг(линукс). Есть папки с файлами, файлов много, они большие.

1. Как из под шелла переименовать файлы следующим образом?: например был файл просто_файл.avi
нужно чтобы он стал просто_файл_[linuxforum.ru].avi то есть, просто к каждому названию файла дописать приставку _[linuxforum.ru]

2. Некоторые файлы на русском и с пробелами в названиях. Основной вопрос, как заменить пробелы на подчерк?

3. Можно ли без гимора сделать так, чтобы русские названия автоматом конвертнулись в транслит? Файлы создавались в винде (если это имеет значение)

Шелл bash

Помогите, для кого это не сложно

Вот как это сделать:

Код: Выделить всё

find . -type f|while read i;do a=`echo $i|sed -e 's/\(.*\.*\)\.\(.*\)/\1_[linuxforum.ru].\2/'|sed -e 's/ /_/g'|uconv -x Cyrillic-Latin`;mv "$i" $a;done

При этом выполняются требуемые пункты 1, 2, 3. В подкаталогах тоже выполняется переименование. Если не хочется, чтобы и в подкаталогах переименовывалось, тогда нужно find заменить на ls.
Но нужно установить программу uconv для нормального транслита.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Как переименовать файлы?

Сообщение sash-kan »

Uncle_Theodore писал(а):
08.05.2007 20:25
Как-то нехорошо получается.
да, дистрибутивы собираются разными людьми. которые могут включить в него разное п.о.
трагедии в этом нет. просто надо иметь в виду.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
*Sasha*
Сообщения: 2519
Статус: Мимо шёл
ОС: Debian

Re: Как переименовать файлы?

Сообщение *Sasha* »

sash-kan писал(а):
08.05.2007 20:12
*Sasha*, да, надо проверять, прежде чем советовать!
Код
find . | sort -r | while read i; do f=$(basename "$i"); d=$(dirname "$i"); mv "$i" "$d/${f// /_}"; done
лишний доллар как-то затесался.

Спасибо, это то что надо.
Спасибо сказали:
A_1
Сообщения: 429
ОС: openSuSE 11

Re: Как переименовать файлы?

Сообщение A_1 »

А вот даже интересно, krename такое сделать не может разве?
Да и запускается он из-под krusader одной кнопкой...
Меня здесь больше нет, т.к. среди модераторов есть подлецы.
Спасибо сказали:
Аватара пользователя
*Sasha*
Сообщения: 2519
Статус: Мимо шёл
ОС: Debian

Re: Как переименовать файлы?

Сообщение *Sasha* »

A_1 писал(а):
10.05.2007 00:20
А вот даже интересно, krename такое сделать не может разве?
Да и запускается он из-под krusader одной кнопкой...

Нет наверное и он же только для файлов вроде.
Спасибо сказали: