Что вам действительно нужно сделать, так это исправить ваш сценарий, чтобы он преобразовывал пути Windows в пути Unix. Один относительно простой способ сделать это — убрать разделители путей из уравнения :, а не указывать полные имена путей для копирования.вы рекурсивно просматриваете каталоги, создавая целевые каталоги на удаленной стороне и указывая только имя файла, а не полный путь.:)
Но пока вы не дойдете до этого момента, вам нужно защитить обратную косую черту от оболочки. Вы можете сделать это, заключив в кавычки одинарные кавычки (обратная косая черта интерпретируется для некоторых символов внутри двойных кавычек ). Обратите внимание, что подстановочный знак находится вне кавычек, поэтому оболочка обрабатывает его как подстановочный знак, а не как литерал*
::)
rm -rv '.\'*
Или вы можете сделать это, избегая обратной косой черты (, что также будет работать в двойных кавычках, но здесь двойные кавычки не нужны):
rm -rv.\\*
Я бы посоветовал, прежде чем удалять данные с помощью подстановочного знака, всегда сначала запускать ls
с теми же аргументами, а затем использовать стрелку вверх, чтобы вызвать последнюю команду, где вы можете изменить ls
на rm
. Таким образом, вы сможете увидеть список файлов до того, как они будут удалены, что предотвратит потенциально серьезную ошибку. :)Я также большой поклонник использования -v
с rm
в подобных случаях.
sauer@lightning:/tmp> ls -vr.\\*
.\innerfile\gitkeep .\gitkeep
.\innerfile:
sauer@lightning:/tmp> rm -vr.\\*
removed '.\gitkeep'
removed directory '.\innerfile'
removed '.\innerfile\gitkeep'
С большим количеством побегов:
sed 's/\\\//|/g' < inputfile
Сделать его более читабельным, используя @
в качестве разделителя:
sed 's@\\/@|@g' < inputfile
Либо:
sed 's/\\\//|/g' your_file
или, используя _
в качестве разделителя шаблона, чтобы нам не нужно было экранировать/
:
sed 's_\\/_|_g' your_file
Использованиеawk
:
для файлаinput
$ cat input
bssapi_6 0\/0\/0\/9\/9
Подойдет следующее:
awk '{gsub(/\\\//,"|"); }1' input
Поскольку мы хотим заменить \/
на |
, здесь и \
, и /
экранируются как \\
и \/
соответственно. Поэтому регулярное выражение \\\/
.