Це в основному те, що написано на кришці, для обох.
mv
- це стандартна утиліта для переміщення одного або декількох файлів до заданої цілі. Його можна використовувати для перейменування файлу, якщо для переміщення є лише один файл. Якщо їх декілька, mv
працює лише, якщо цільовим є каталог, і переміщує файли туди.
Так mv foo bar
буде або перемістити файл foo
у каталог bar
(якщо він існує), або перейменувати foo
в bar
(якщо bar
його немає або немає каталогу). mv foo1 foo2 bar
просто перемістить обидва файли в каталог bar
, або скаржиться, якщо bar
це не каталог.
mv
викличе rename()
функцію бібліотеки С для переміщення файлів, і якщо це не працює (вони переміщуються в іншу файлову систему), він скопіює файли та видалить оригінали.
Якщо все, що у вас є, mv
і ви хочете перейменувати кілька файлів, вам доведеться скористатися циклом оболонки. Є цілий ряд питань про те , що тут на сайті, дивіться , наприклад , це , це , і інші .
З іншого боку, різні rename
утиліти перейменують файли окремо.
rename
Від Util-Linux , який ви згадуєте робить просту рядок заміни, наприклад , rename foo bar *
зміниться foobar
на barbar
, і asdffoo
на asdfbar
. Однак це не приймає регулярного виразу!
Утиліта перейменування Perl ( або різні її примірники ) використовує вираз Perl для перетворення імен файлів. Можна, швидше за все, використовувати команду, де шаблон є регулярним виразом.s/pattern/replacement/
Як перейменування util-linux, так і перейменування Perl можна одночасно використовувати для переміщення файлів до іншого каталогу, вносячи відповідні зміни до імені файлу, але це трохи незручно. Також rename()
файли не викликають більше , тому переміщення з однієї файлової системи в іншу не працює.
Що стосується того, що у rename
вас є, це може залежати від вашого розповсюдження та / або того, що ви встановили. Більшість з них підтримують rename --version
, тому використовуйте це, щоб визначити, який у вас є.
type -a rename
іrename --version
?