У меня есть дерево папок. Некоторые из них содержат файл с именем «.file.php». Как мне рекурсивно переименовать все файлы с этим именем в дереве в «.file1.php»? Я на сервере Debian.
Вы имеете rename
на debian? idk, но так как это доступно на человечности, наверное.
ИМЯ переименовывает - переименовывает несколько файлов
РЕЗЮМЕ переименовывает [-v] [-n] [-f] perlexpr [файлы]
ОПИСАНИЕ "переименовывает", переименовывает имена файлов, предоставленные согласно правилу, указанному как первый аргумент. perlexpr аргументом является выражение Perl, которое, как ожидают, изменит $ _ строка в Perl для по крайней мере некоторых указанных имен файлов. Если данное имя файла не будет изменено выражением, то оно не будет переименовано. Если никакие имена файлов не будут даны на командной строке, то имена файлов будут считаны через стандартный вход.
For example, to rename all files matching "*.bak" to strip the extension, you might say rename 's/\.bak$//' *.bak To translate uppercase names to lower, you'd use rename 'y/A-Z/a-z/' *
пример, скопированный с результата Google, мог бы быть уже вполне близко к тому, что Вы хотите:
Вот пример переименовать команды:
переименуйте-n ’s/.htm$/.html /’ *.htm
-n означает, что это - тестовый прогон и на самом деле не изменит файлов. Это покажет Вам список файлов, которые были бы переименованы, если бы Вы удалили-n. В случае выше, это преобразует все файлы в текущем каталоге от расширения файла .htm к .html.
Если бы вывод вышеупомянутого тестового прогона смотрел хорошо затем, то Вы могли бы выполнить окончательную версию:
переименуйте-v ’s/.htm$/.html /’ *.htm
-v является дополнительным, но это - хорошая идея включать его, потому что это - единственная запись, которую Вы будете иметь изменений, которые были внесены переименовать командой....
Полное решение будет выглядеть следующим образом
find -name '*.file.php' -exec rename 's/\.file\.php$/.file1.php/' {} \;