Переименование файлов с помощью команды переименования в оболочке bash - PullRequest
1 голос
/ 11 апреля 2019

Я читал другие подобные вопросы на форуме и не могу понять, почему команда, которую я попробовал, не работает.

У меня есть список файлов, названных в форме aaaa_100_aaaa.csv, aaaa_100_aaab.csv, aaaa_100_aaac.csv и т. д., и я хочу заменить «100» на «200».

Я использую bash в Windows PowerShell WSL.Я попытался с помощью этой команды

 rename 's/420/410/g' *.csv

Я нашел такое же выражение во многих ответах на форуме, но оно не работает.Я получил сообщение об ошибке

mv: target 'aaaa_100_aaaa.csv' is not a directory.

1 Ответ

0 голосов
/ 12 апреля 2019

Учитывая, что сообщение об ошибке начинается с mv: и, следовательно, по-видимому, создается командой mv ("move"), я готов поспорить, что ваш bash был настроен для обработки rename в качестве альтернативного имени для mv. Таким образом, вы на самом деле не запускаете команду rename.

Чтобы проверить это, запустите type rename. Вероятно, он скажет вам, что rename - это псевдоним или функция оболочки, а не ссылка на исполняемый файл /usr/bin/rename, который вы ожидали.

Вы можете обойти это, используя полный путь для вызова rename:

    /usr/bin/rename 's/100/200/g' *.csv

или записав обратную косую черту перед rename, чтобы указать bash, чтобы пропустить любую специальную обработку имени команды:

    \rename 's/100/200/g' *.csv

Конечно, если вы хотите часто использовать реальное rename, то не забывайте делать это каждый раз, это будет раздражать. Вы можете unalias rename, но это только исправит это в текущей оболочке.

Долгосрочное решение состоит в том, чтобы bash не рассматривал rename как ярлык. Для этого сначала нужно выяснить, где определяется псевдоним или функция, а затем удалить это определение. Это, вероятно, в вашем файле $HOME/.bashrc или $HOME/.bash_profile. Если его там нет, то что-то вроде grep rename $HOME/.* должно найти его. Если это не удается найти, то это может быть файл запуска системы, который вы не можете (или не хотите) редактировать, и в этом случае вы можете избавиться от него, добавив unalias rename к вашему .bashrc или .bash_profile.

...