Это в основном то, что написано на крышке, для обоих.
mv
стандартная утилита для перемещения одного или нескольких файлов к заданной цели. Его можно использовать для переименования файла, если нужно переместить только один файл. Если их несколько, mv
работает , только если целью является каталог, и перемещает туда файлы.
Поэтому mv foo bar
будет либо перемещать файл foo
в каталог bar
(если он существует), либо переименовывать foo
в bar
(если bar
он не существует или не является каталогом). mv foo1 foo2 bar
просто переместит оба файла в каталог bar
, или жаловаться, если bar
это не каталог.
mv
вызовет rename()
функцию библиотеки C для перемещения файлов, и если это не сработает (они перемещаются в другую файловую систему), он скопирует файлы и удалит оригиналы.
Если все, что у вас есть, 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
?