2016-12-29 3 views
-3

У меня есть сервер Linux (Ubuntu), на котором я размещаю сайт. Я меняю свое доменное имя, скажем, от xxxxx.xx до yyyyy.yy.Найти и заменить имена файлов и папок в полной файловой системе Linux

То, что я хотел бы это найти xxxxx.xx и заменить его yyyyy.yyкак во всех именах файлов и папок и во всех содержимых файлы через всю файловую систему, чтобы отразить это изменение.

Я не верю, что этот вопрос задан целиком, но если я пропустил его, пожалуйста, укажите мне в правильном направлении. Благодарю.

+1

Как можно ожидать нам найти файлы с шаблоном 'xxxxx.xx'? – Inian

+0

Я не уверен, что понимаю ваш вопрос; 'xxxxx.xx' - это точная строка, которую я хочу сопоставить, а не шаблон. – Zak

+0

Являются ли файлы/каталоги «xxxx.xx»? – Inian

ответ

2

Вы можете использовать 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 {} \; 
+0

Спасибо, я попробую! – Zak

+0

@Zak: дайте мне знать, если это сработало, и не забудьте принять решение, чтобы отметить его полезным для дальнейшего использования. – Inian

+1

Еще раз спасибо за ваш ответ. Я думаю, что он работает, хотя я не хочу пытаться «жить», но пока не хочу переименовывать. Я обязательно приму ваш ответ, как только я уверен, что он работает. – Zak

Смежные вопросы