Сообщение об ошибке означает, что у вас обратная косая черта. В мире *nix специальные символы 'экранируются' путем добавления обратного слеша перед ними. Это означает, что они интерпретируются как простые символы, а не как специальные. Например:
$ printf 'foo\nbar'
foo
bar
\n
- это специальный символ, означающий newline. Но если мы избавимся от слэша, то получим:
$ printf 'foo\\nbar'
foo\nbar
Так что от него можно избавиться либо экранированием обратного слеша:
touch ~/deleted/"$(echo "directory_$(readlink -f -- "$1")"|tr '/' '\\')
, либо перенаправлением вывода ошибки tr
(а не touch
, что вы делали):
touch ~/deleted/"$(echo "directory_$(readlink -f -- "$1")"|tr '/' '\' 2> /dev/null)
Однако, я не могу в достаточной мере подчеркнуть, что это очень плохая идея® для создания имен файлов с обратным слешем. Действительно. В дальнейшем с ними будет чертовски сложно разобраться и разобраться. Почему бы не использовать другой символ?
Не совсем ответ, который вы попросили, но необходимо смочь передать файлы посредством соединения SSH:
отправка
ssh user1@firewall "ssh user2@cluster \"cat > remote_file\" " < local_file
выборка
ssh user1@firewall "ssh user2@cluster \"cat remote_file\" " > local_file
РЕДАКТИРОВАНИЕ:
существуют также на терминальном основанные инструменты передачи файлов как "zmodem"
Читайте о обратном SSH. Может быть, это поможет вам. Я использую его для подключения к удаленным хранилищам за Nat.