Как рекурсивно переименовать все файлы в каталоге, меняя одно расширение на другое, для тысяч файлов в тысячах подпапок? Я вижу много команд, которые делают почти то, что я хочу, но не совсем.
find . -name "*.andnav" -exec rename .andnav .tile {} \;
syntax error at (eval 1) line 1, near "."
...
rename -nv 's/\.andnav$/\.tile/i' *.andnav
0.png.andnav renamed as 0.png.tile
linux
command-line
file-management
rename
эндолиты
источник
источник
rename
или Red Hatrename
?Ответы:
Догадаться
конечно удалите -v, когда будете это делать, иначе вы потеряете время на отображение всех файлов
источник
Что-то типа:
источник
С зш:
Удалить,
-n
чтобы фактически выполнить переименование.источник
Я обнаружил, что этот метод легче и легче читать:
По крайней мере, в деривациях Ubuntu переименование берет список файлов из STDIN, если их нет в командной строке. И это можно легко проверить с помощью:
пока не поймешь правильно.
источник
Переименуйте файлы и каталоги с
find -execdir | rename
Если вы собираетесь переименовывать как файлы, так и каталоги не просто с помощью суффикса, тогда это хороший шаблон:
В отличие от этого, потрясающая
-execdir
опция делаетcd
в каталог перед выполнениемrename
команды-exec
.-depth
убедитесь, что переименование происходит сначала для детей, а затем для родителей, чтобы предотвратить потенциальные проблемы с отсутствующими родительскими каталогами.-execdir
требуется, потому что переименование плохо работает с путями ввода неосновного имени, например, следующие ошибки:PATH
Хакерство требуется , потому что-execdir
имеет один очень досадный недостаток:find
крайне самоуверенный и отказывается что - либо делать с ,-execdir
если у вас есть какие - либо относительные пути в вашемPATH
переменном окружении, например./node_modules/.bin
, в противном случае с:Смотрите также: /ubuntu/621132/why-using-the-execdir-action-is-insecure-for-directory-which-is-in-the-path/1109378#1109378
-execdir
является расширением GNU find для POSIX .rename
основан на Perl и поставляется изrename
пакета. Проверено в Ubuntu 18.10.Переименовать обходное решение
Если ваши входные пути не приходят
find
или вам надоело относительное раздражение пути, мы можем использовать некоторые возможности Perl для безопасного переименования каталогов, как в:Я не нашел удобный аналог для
-execdir
сxargs
: Xargs: изменение рабочего каталога путь к файлу перед выполнением?sort -r
Требуется для того , чтобы файлы приходят после их соответствующих каталогов, так как более длинные пути приходят после того, как более короткие, с тем же префиксом.источник