Я назвал несколько файлов с пробелами в них, и я хочу заменить пробел на _
. Однако каждый раз, когда я пишу в оболочке команду с именем файла (например Spring 2011
), оболочка не распознает файл или каталог.
Что я могу сделать по этому поводу? Есть ли способ использовать символ Юникода для пробела?
bash
цикл for: см. мое решение здесь .Ответы:
Выйти из пространства, например
Spring\ 2011
, или использовать кавычки, например'Spring 2011'
. В будущем, как правило, плохая идея использовать имена файлов с пробелами в них в любой * NIX.Если у вас есть
rename
, вы можете использовать это:источник
rename
версия 2.23)Если на вашем компьютере есть команда переименования , тогда все пробелы в файле / директории в текущем рабочем каталоге будут заменены на подчеркивания:
источник
rename --version
rename from util-linux 2.23.2
.-bash: /usr/bin/rename: Argument list too long
Если у вас нет
rename
или вы предпочитаете использовать только оболочку:Сломано:
*\ *
выбирает все файлы с пробелом в имени в качестве входных данных дляfor
цикла."$f"
важны, потому что мы знаем, что в имени файла есть пробел, и в противном случае он будет выглядеть как 2+ аргументаmv
.${f//str/new_str}
специфичная для bash функция подстановки строк Все экземплярыstr
заменены наnew_str
.источник
for f in *\ *; do mv "$f" "${f// /_}"; done
это работаетmv "Spring 2011.file" Spring_2011.file
должен указать командной строке принять строку в кавычках в качестве одного ввода.источник
Чтобы программно переименовать N файлов, вы можете использовать простой
bash
цикл for.Если у вас меньше , чем 5 имен файлов, то вы можете вручную ввести во всех именах файлов и использовать
rename
команду как выше решение предлагает. Но для меня ... Я предпочитаю программное решение ... даже когда есть только 4 файла.п.с.
если вы не знакомы с
Bash
расширением параметров (то есть${filename// /_}
), вы можете использоватьrename
команду:источник