Линукс переименовать каталоги и убрать символ # из имени - PullRequest
3 голосов
/ 10 марта 2010

У меня есть каталог с большим количеством подкаталогов с # перед ними:

#adhasdk
#ad18237

Я хочу переименовать их все и удалить символ # Я пытался сделать:

rename -n `s/#//g` *

но, похоже, не работает.

-bash: s/#//g: No such file or directory

Любые идеи по этому поводу. Спасибо

Ответы [ 5 ]

7 голосов
/ 10 марта 2010

Просто используйте

$ rename 's/^#//' *

используйте -n только для проверки того, что, по вашему мнению, это произойдет, действительно происходит. В вашем примере у вас есть подсказка о неправильных кавычках (обратных галочках) в сообщении об ошибке

 -bash: s/#//g: No such file or directory

bash пытается выполнить команду с именем s/#//g.

Нет, что используя g (global) и не привязывая регулярное выражение, вы замените любое #, а не только то, которое находится в первой позиции.

3 голосов
/ 10 марта 2010

Я не знаю, является ли это опечаткой, когда вы ее здесь напечатали, но эта команда "переименовать" должна работать, если:

  1. вы опускаете "-n" и
  2. Вы цитируете подстановку с помощью обычных одинарных кавычек, а не обратных кавычек

"-n" говорит, что на самом деле ничего не нужно делать. Обратные кавычки просто неверны (они означают что-то, но не то, что вы хотите здесь).

2 голосов
/ 10 марта 2010

Проблема в том, что вы используете обратные галочки (`). Вы должны использовать нормальные кавычки:

rename -n 's/#//g' *
1 голос
/ 10 марта 2010
for DIR in \#*/
do
     echo mv "$DIR" "${DIR/#\#/}"
done
0 голосов
/ 20 февраля 2016

Мне пришлось переименовать все папки в данной папке. Имя каждой папки содержало текст в круглых скобках. Следующая команда удалила круглые скобки из всех имен папок:

переименовать 's /(.+)//' *

...