Вы можете попробовать TestDisk , в идеале на копии диска (при условии, что у вас есть другой компьютер, который вы можете скопировать это к ...). TestDisk может восстанавливать разделы, если диск не был перезаписан, а в случае сбоя PhotoRec можно использовать для восстановления некоторых типов данных. Прочтите всю документацию перед использованием любого инструмента!
Это сработало для меня:
/tmp $ ls foo*
'foo;2'
/tmp $ scp 'foo;2' 'localhost:/tmp/foo\;3'
Password:
foo;2 100% 0 0.0KB/s 0.0KB/s 00:00
/tmp $ ls foo*
'foo;2' 'foo;3'
/tmp $
В bash одинарные ('
) и двойные ("
) кавычки могут использоваться для цитирования точки с запятой. Чтобы заключить их в кавычки, нет необходимости ставить дополнительный обратный слеш внутри кавычек. Обратная косая черта нужна, чтобы заключить в двойные кавычки некоторые специальные символы, но точка с запятой не входит в их число (например, "
и \
).
После проверки я пришел к выводу, что сообщение Command not found
приходит с удаленной машины! Значит, все вышесказанное верно, по крайней мере, не до тех пор, пока задействован один shell! Но здесь имя файла назначения, похоже, каким-то образом передается оболочке на другой стороне.
Так что если ваш файл называется /home/user/gege/feed.zip;2
, а должен быть сохранен как /home/user/gege/feed. zip;3
на другой машине любой из них должен работать
scp 'fx-devel1:/home/user/gege/feed.zip;2' 'fx-devel2:/home/user/gege/feed.zip\;3'
scp "fx-devel1:/home/user/gege/feed.zip;2" "fx-devel2:/home/user/gege/feed.zip\\;3"
scp fx-devel1:/home/user/gege/feed.zip\;2 fx-devel2:/home/user/gege/feed.zip\\\;3
Вы можете сделать несколько тестов, как работает цитирование в оболочке (и, очевидно, прочитать соответствующую часть man-страницы) с помощью этой функции:
test_quoting () {
printf 'Number of args: %s\n' "$#"
printf 'First arg: %s\n' "$1"
}
test_quoting abc def
test_quoting "abc def"
test_quoting 'xyz;123'
test_quoting foo\;bar
test_quoting 'foo\;bar'
# and so on