Как заменить пробелы в имени файла?

8

я попробовал это следующим образом:

rename 'bla bla .txt' blabla.txt

Но это не работает, каков правильный синтаксис для этого случая?

NES
источник

Ответы:

15

Вы не должны использовать 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".

Стефано Палаццо
источник
спасибо, как будет выглядеть команда, если в имени файла есть много пробелов? Есть ли простое регулярное выражение, чтобы не было необходимости избегать каждого пробела?
РЭШ
Обновлен ответ, чтобы адресовать много пробелов и одинарных v. Двойных кавычек.
Стефано Палаццо
Существует разница между одинарными и двойными кавычками, но эта проблема не имеет значения. См. Эту статью для точных деталей
Стефано Палаццо
4

переименовать является специализированной командой для массового переименования. На самом деле то, что мы обычно называем «переименованием», на самом деле является «переходом» к новому имени:

mv 'bla bla .txt' blabla.txt
ændrük
источник
В чем разница между написанием имени файла в одинарных и двойных кавычках?
РЭШ
4
Двойные кавычки позволяют расширять переменные и заменять процессы; одиночное цитирование - нет. A=bla ; mv "$A $A .txt" blabla.txtпереместится в bla bla .txt, но A=bla ; mv '$A $A .txt' blabla.txtбудет искать файл с именем «$ A $ A .txt». Любой из них будет работать для вашего примера, хотя.
frabjous
1
rename "s/\s//g" "bla bla.txt"

s является командой sed Substitute.

\ s для whiteSpace

Вы заменяете ничем. Остальная строка замены идет после второй косой черты.

g для Global, то есть заменить каждый экземпляр. Пропуск g заменяет только первый экземпляр.


Эта команда заменит пробельные символы подчеркиванием во всех файлах:

rename "s/\s/_/g" *
Ниссим Нанач
источник