Вы можете использовать GNU find
и немного bash
манипуляции строк для фактического переименования файлов.
*xxxx.xx*
- это шаблон глобуса, который соответствует файлам/папкам, имеющим это место в их именах.
Настоятельно рекомендую NOT, чтобы запустить повторное имя, но запустите с echo
один раз, чтобы увидеть, правильно ли указаны файлы. Предлагаю две разные команды: одну для переименования файлов и другую для папок, потому что для переименования папок требуется несколько дополнительных опций, чтобы избежать рекурсивного переименования файлов.
Для повторного именования папок: -
find . -depth -type d -name "*xxxx.xx*" -execdir sh -c 'x=$1; y="${x/xxxx.xx/yyyy.yy}"; mv -v "$x" "$y"' sh {} \;
Для файлов: -
find . -type f -name "*xxxx.xx*" -exec sh -c 'x=$1; y="${x/xxxx.xx/yyyy.yy}"; mv -v "$x" "$y"' sh {} \;
НЕ запускать команды сразу же, просто запустить следующие команды, чтобы увидеть, если оригинал ли файл/папка и переименованный файл/папка имеют собственные имена по вашему желанию.
find . -type f -name "*xxxx.xx*" -exec sh -c 'x=$1; y="${x/xxxx.xx/yyyy.yy}"; echo "$x" "$y"' sh {} \;
(а)
find . -depth -type d -name "*xxxx.xx*" -execdir sh -c 'x=$1; y="${x/xxxx.xx/yyyy.yy}"; echo "$x" "$y"' sh {} \;
Поскольку вы хотите изменить содержимое файла также добавить дополнительный sed
в месте файла повторно именование в
find . -type f -name "*xxxx.xx*" -exec sh -c 'x=$1; y="${x/xxxx.xx/yyyy.yy}"; mv -v "$x" "$y"; sed -i 's/xxxx.xx/yyyy.yy/g' "$y" ' sh {} \;
Как можно ожидать нам найти файлы с шаблоном 'xxxxx.xx'? – Inian
Я не уверен, что понимаю ваш вопрос; 'xxxxx.xx' - это точная строка, которую я хочу сопоставить, а не шаблон. – Zak
Являются ли файлы/каталоги «xxxx.xx»? – Inian