Видео смотреть бесплатно

Смотреть 4k видео

Официальный сайт oriflame100 24/7/365

Смотреть видео бесплатно

06.03.2009 16:32

booleyМассовое переименование файлов

Повседневное применение / Перл



Понадобилось переименовать кучу файлов из формата

файлнэйм.с.тхт в файлнэйм.с

Каждый файл переименовывать жутко не хотелось.

Команда mv *.txt * слишком утопична :)





Задача ясна, начинаем решать.



Сначала нужно разработать алгоритм решения. На человечьем наречии.



получить исходный список файлов
получить конечный список файлов
переименовать каждый элемент 1 в соответствующий элемент 2



Теперь идем далее - наброски некоторых моментов.



получить список файлов нужно по связке ls | grep
регулярные выражения - сила, нужно читать ман
переименовывать по mv


Приступаем к разработке самого скрипта.



 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl
# 'rename throught pattern' script
# получаем список файлов через ls | grep
#
# столько слэшей нужно потому, что слэш
# экранируется перлом. то есть grep
# идет \\.txt
@list1=split("\n",`ls | grep \\\\.txt`);
# изначально второй список равен первому
@list2=@list1;
# регулярное выражение через for
# замена окончания .txt на ничего
# $#list1 = индекс последнего элемента
# массива
for ($i=0;$i<=$#list1;$i++) {
@list2<$i> =~ s/\.txt$//;
`mv @list1<$i> @list2<$i>`;
}



Тэги: perl regexp регулярные выражения
+ 0 -
Похожие Поделиться

Astramak 06.03.2009 17:35 #
+ 0 -
Мне кажется нужно разделить блог на два...
booley 06.03.2009 17:42 #
+ 0 -
Как? Я не нашел такой кнопки. Сделаете - хорошо
Astramak 06.03.2009 17:53 #
+ 0 -
Переименовать этот и создать второй...
booley 06.03.2009 17:55 #
+ 0 -
Я не нашел именно кнопки переименовать...
Astramak 06.03.2009 21:33 #
+ 0 -
Написать лс exelens
booley 07.03.2009 11:07 #
+ 0 -
Они точно работают?
poizon 06.03.2009 18:35 #
+ 0 -
на перле можно все не много проще сделать
for (grep {chomp;s/\.txt$//;} `ls | grep '\\.txt'`) {
`mv $_\.txt $_`;
}
booley 25.03.2009 23:01 #
+ 0 -
Perl has many ways. It isn't dark and light way. Just different ways.
(c) один знакомый
Minoru 06.03.2009 20:27 #
+ 0 -
В Debian (и не только в нём) есть замечательная утилита rename, которая принимает на вход регексп и список файлов.
Хотя, конечно, на системах, где rename'а нету, придётся сочинять нечто вроде вышеописанного.
booley 06.03.2009 20:32 #
+ 0 -
Не знал о ней, пришлось писать скрипт :)
razum2um 05.06.2009 20:43 #
+ 0 -
Понадобилось переименовать кучу файлов из формата
файлнэйм.с.тхт в файлнэйм.с

perl? Из пушки по воробьм.
Все решается одной сторокой на bash&sed
razum2um@localhost ~/test $ mkdir test
razum2um@localhost ~ $ cd test
razum2um@localhost ~/test $ touch file{1,2,3,4,5}.c.txt
razum2um@localhost ~/test $ ls
file1.c.txt file2.c.txt file3.c.txt file4.c.txt file5.c.txt
razum2um@localhost ~/test $ for i in *.c.txt; do mv $i $(echo $i | sed -e 's/\.txt$//'); done
razum2um@localhost ~/test $ ls
file1.c file2.c file3.c file4.c file5.c
====
Ну а если не только в текущей папке, то прикручиваем вначале find
;)
mironov_orig 29.07.2011 01:51 #
+ 0 -
Некропост, и вполне вероятно, что за два года, твои навыки в шел-скриптинге возрасли многократно, проcто, на случай таких же некрофилов как и я (или просто перешдших по ссылке, поиску, тегу). Всё решается на чистом шеле и чуть лаконичнее.
1
2
3
# {1,2,3,4,5} можно прекрасно заменить на {1..5}
# основная часть без седа выглядит так:
for i in *.c.txt; do mv "$i" "${i%.*}"; done

Смотреть онлайн бесплатно

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн