Как переименовать файлы и подкаталоги в командной строке bash?

922
Andrew WC Brown

В Rails иногда мне нужно переименовывать несколько каталогов и файлов, например:

app/models/person.rb app/views/persons/_person.haml app/controllers/persons_controller.rb ---- app/models/user.rb app/views/users/_user.haml app/controllers/users_controller.rb 

Я исчерпал поиск решений. Кто-нибудь знает простой инструмент командной строки, который я могу установить? Например mvall . person user.

1
Посмотрите на соответствующие вопросы в правой колонке. Есть много ответов на этот вопрос. alecail 11 лет назад 3

1 ответ на вопрос

1
Rusty Lemur

Я уверен, что есть лучшие способы сделать это, но вот моя реализация.

$ old=person; new=user; for i in $(find ./ -name "*$old*"); do mv $i $(echo $i | sed 's/'$old'/'$new'/g'); done 

Все инструменты находятся в bash, поэтому ничего не нужно устанавливать.

Вы также можете использовать `find` для выполнения ваших изменений (а не просто для определения местоположения целей). Вероятно, это зависит от того, чувствуете ли вы себя более комфортно с` find` или `bash`. Dominic Cronin 11 лет назад 0
@Rusty: `for i in $ (find.…)` Потерпит неудачу, если есть имена файлов, содержащие пробелы. И вам не нужно говорить «`. / `». Scott 11 лет назад 0
@Dominic: Гарантируется ли `find` нормальное поведение, если вы переименовываете каталоги, пока он пересекает дерево каталогов? Scott 11 лет назад 0
@ Скотт - хороший вопрос. Не знаю ответа Dominic Cronin 11 лет назад 0