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