Я попробовал это следующим образом:
rename 'bla bla .txt' blabla.txt
Но это не работает, какой синтаксис для этого случая правильный?
Вы не должны использовать rename
для переименования всего одного файла использовать mv
(1) вместо этого.
Далее, для выхода из пробела снабдите префиксом его a \
:
"Ubuntu One"
→ Ubuntu\ One
Ваша команда была бы
mv bla\ bla.txt blabla.txt
обратная косая черта говорит удару, что следующий символ так или иначе специален, например. \a
для 'звонка', \
для литерального пространства и так далее
посмотрите man ascii
(7) для больше
С другой стороны, так как Вы теперь используете корректную команду mv
, можно заключить имя файла в кавычки, если существует много пробелов:
mv "bla bla.txt" blabla.txt
(Это было бы bla\ \ \ \ bla.txt
в завершенной форме)
В ударе заключенные в кавычки строки (одинарные или двойные кавычки) рассматривают как отдельный аргумент, тогда как неупомянутые строки будут разделены на несколько аргументов, как это:
["mv", "bla", "bla.txt", "blabla.txt", ]
и mv
ожидает:
["mv", "source", "destination", ]
Примечание: ввод 'mv' и первые несколько символов имени файла и нажатие TAB дадут Вам завершенную версию имени файла, делая переименование быстрого и легкого.
rename
используется, чтобы пакетно обработать переименование файлов с помощью регулярного выражения, как продемонстрировано в примере из его страницы справочника:
rename 's/\.bak$//' *.bak
Лишить любое происшествие .bak (в конце строки [$]) изо всех файлов, соответствующих "*.bak".
rename - это специализированная команда для массового переименования. Интуитивно, то, что мы обычно называем «переименованием», на самом деле является «движением» к новому имени:
mv 'bla bla .txt' blabla.txt
rename "s/\s//g" "bla bla.txt"
s - команда sed Substitute.
\ s для whiteSpace
Вы заменяете ничем. Остальная строка замены идет после второй косой черты.
g для Global, то есть заменяет каждый экземпляр. Пропуск g заменяет только первый экземпляр.
Эта команда заменит пробелы во всех файлах подчеркиванием:
rename "s/\s/_/g" *