06.03.2009 16:32
booley — Массовое переименование файлов
Повседневное применение / ПерлПонадобилось переименовать кучу файлов из формата
файлнэйм.с.тхт в файлнэйм.с
Каждый файл переименовывать жутко не хотелось.
Команда mv *.txt * слишком утопична :)
Задача ясна, начинаем решать.
Сначала нужно разработать алгоритм решения. На человечьем наречии.
получить исходный список файлов
получить конечный список файлов
переименовать каждый элемент 1 в соответствующий элемент 2
Теперь идем далее - наброски некоторых моментов.
получить список файлов нужно по связке ls | grep
регулярные выражения - сила, нужно читать ман
переименовывать по mv
Приступаем к разработке самого скрипта.
Astramak 06.03.2009 17:35 #
+ 0 -
Мне кажется нужно разделить блог на два...
на перле можно все не много проще сделать
for (grep {chomp;s/\.txt$//;} `ls | grep '\\.txt'`) {
`mv $_\.txt $_`;
}
for (grep {chomp;s/\.txt$//;} `ls | grep '\\.txt'`) {
`mv $_\.txt $_`;
}
Perl has many ways. It isn't dark and light way. Just different ways.
(c) один знакомый
(c) один знакомый
В Debian (и не только в нём) есть замечательная утилита rename, которая принимает на вход регексп и список файлов.
Хотя, конечно, на системах, где rename'а нету, придётся сочинять нечто вроде вышеописанного.
Хотя, конечно, на системах, где rename'а нету, придётся сочинять нечто вроде вышеописанного.
Понадобилось переименовать кучу файлов из формата
файлнэйм.с.тхт в файлнэйм.с
файлнэйм.с.тхт в файлнэйм.с
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
;)
Некропост, и вполне вероятно, что за два года, твои навыки в шел-скриптинге возрасли многократно, проcто, на случай таких же некрофилов как и я (или просто перешдших по ссылке, поиску, тегу). Всё решается на чистом шеле и чуть лаконичнее.
1 2 3 |