Как переименовать файлы? (задача из трех составляющих)
Модератор: Bizdelnick
-
buzzie
- Сообщения: 6
Как переименовать файлы?
Привет всем
Прошу помощи у сообщества по таким вопросам:
Есть хостинг(линукс). Есть папки с файлами, файлов много, они большие.
1. Как из под шелла переименовать файлы следующим образом?: например был файл просто_файл.avi
нужно чтобы он стал просто_файл_[linuxforum.ru].avi то есть, просто к каждому названию файла дописать приставку _[linuxforum.ru]
2. Некоторые файлы на русском и с пробелами в названиях. Основной вопрос, как заменить пробелы на подчерк?
3. Можно ли без гимора сделать так, чтобы русские названия автоматом конвертнулись в транслит? Файлы создавались в винде (если это имеет значение)
Шелл bash
Помогите, для кого это не сложно
Прошу помощи у сообщества по таким вопросам:
Есть хостинг(линукс). Есть папки с файлами, файлов много, они большие.
1. Как из под шелла переименовать файлы следующим образом?: например был файл просто_файл.avi
нужно чтобы он стал просто_файл_[linuxforum.ru].avi то есть, просто к каждому названию файла дописать приставку _[linuxforum.ru]
2. Некоторые файлы на русском и с пробелами в названиях. Основной вопрос, как заменить пробелы на подчерк?
3. Можно ли без гимора сделать так, чтобы русские названия автоматом конвертнулись в транслит? Файлы создавались в винде (если это имеет значение)
Шелл bash
Помогите, для кого это не сложно
-
BlackStar
- Сообщения: 1338
- Статус: We are all Kosh
- ОС: Fedora 10
-
Uncle_Theodore
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: Как переименовать файлы?
1.
Код: Выделить всё
rename .avi _\[linuxforum.ru\].avi *avi-
buzzie
- Сообщения: 6
Re: Как переименовать файлы?
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 "."
И в ней хотелось бы сделать так, чтобы дописывать названия для всех файлов, с любым расширением, потому что есть и авишки и экзешники и пдф
Вы несколько переоценили мои познания, оставив эти конструкции без комментариев
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: Как переименовать файлы?
Хм... Интересно, почему она у тебя не работает?
Ты так же делал?
Может, точки тоже заэкранировать?
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: Как переименовать файлы?
делал абсолютно также
Код: Выделить всё
[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: Как переименовать файлы?
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: Как переименовать файлы?
похоже придется плакать, а не смеяться 
название файла без пробелов и прочего...
попробовал последнюю вариацию - не идет.
увы. (( а другие варианты возможны? может с помощью awk? или перл...
к тому же задача стоит переименовывать все файлы а не с отдельным расширением... может в таком варианте глюка не будет?
а как посмотреть какая система работает кстати?
название файла без пробелов и прочего...
попробовал последнюю вариацию - не идет.
увы. (( а другие варианты возможны? может с помощью awk? или перл...
к тому же задача стоит переименовывать все файлы а не с отдельным расширением... может в таком варианте глюка не будет?
а как посмотреть какая система работает кстати?
-
Uncle_Theodore
- Сообщения: 3339
- ОС: Slackware 12.2, ArchLinux 64
Re: Как переименовать файлы?
Попробуй так
в смысле?
Код: Выделить всё
for ff in *.avi; do mv $ff ${ff%.avi}_\[linuxforum.ru\].avi; doneКод: Выделить всё
а как посмотреть какая система работает кстати?в смысле?
-
BlackStar
- Сообщения: 1338
- Статус: We are all Kosh
- ОС: Fedora 10
Re: Как переименовать файлы?
Скрипт для второго пункта
Код: Выделить всё
#!/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: Как переименовать файлы?
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: Как переименовать файлы?
там sed -e 's/ /_/g' надо
-
diesel
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: Как переименовать файлы?
как-то вот так еще можно, без sed'а
ls|while read i; do mv "$i" "${i// /_}"; done
если в именах файлов нет переносов строк, обычно нет
аналогично можно и с for сделать, если не запутаешься в кавычках
ls|while read i; do mv "$i" "${i// /_}"; done
если в именах файлов нет переносов строк, обычно нет
аналогично можно и с for сделать, если не запутаешься в кавычках
-
buzzie
- Сообщения: 6
-
nesk
- Сообщения: 2268
- Статус: Линукссаксовец
- ОС: MS Windows XP Home SP3
Re: Как переименовать файлы?
может у вас разные версии rename?
попробуй так
rename s/.avi/_\[linuxforum.ru\].avi/ *.avi
в моем случае rename это симлинк на перловый скрипт /usr/bin/prename
так что можешь глянуть как оно работает
попробуй так
rename s/.avi/_\[linuxforum.ru\].avi/ *.avi
в моем случае rename это симлинк на перловый скрипт /usr/bin/prename
так что можешь глянуть как оно работает
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
0xDEFEC8ED
0xDEFEC8ED
-
*Sasha*
- Сообщения: 2519
- Статус: Мимо шёл
- ОС: Debian
-
sash-kan
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Как переименовать файлы?
замени ls на
Код: Выделить всё
find . -type fПисать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
diesel
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: Как переименовать файлы?
можно, правда красивых вариантов в голову не приходит. вроде вот так вот работает(но не уверен):
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: Как переименовать файлы?
по поводу транслита есть программка uniconv -encode Russian-Translit
из пакета yudit
из пакета yudit
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
0xDEFEC8ED
0xDEFEC8ED
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Как переименовать файлы?
Просто есть 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: Как переименовать файлы?
точно-точно. еще ведь и каталоги могут быть пробелами «продырявлены». тогда так:
find . | sort -r | while read i; do f=$(basename "$i"); $d=$(dirname "$i"); mv "$i" "$d/${f// /_}"; done
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
*Sasha*
- Сообщения: 2519
- Статус: Мимо шёл
- ОС: Debian
Re: Как переименовать файлы?
Я заменил во всех файлах этим
Код: Выделить всё
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: Как переименовать файлы?
*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
-
pktfag
- Сообщения: 142
- ОС: Arch Linux
Re: Как переименовать файлы?
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: Как переименовать файлы?
да, дистрибутивы собираются разными людьми. которые могут включить в него разное п.о.
трагедии в этом нет. просто надо иметь в виду.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
*Sasha*
- Сообщения: 2519
- Статус: Мимо шёл
- ОС: Debian
-
A_1
- Сообщения: 429
- ОС: openSuSE 11
Re: Как переименовать файлы?
А вот даже интересно, krename такое сделать не может разве?
Да и запускается он из-под krusader одной кнопкой...
Да и запускается он из-под krusader одной кнопкой...
Меня здесь больше нет, т.к. среди модераторов есть подлецы.
-
*Sasha*
- Сообщения: 2519
- Статус: Мимо шёл
- ОС: Debian