Для копирования файлов на той же машине Вам не было бы нужно scp
вообще. Так или иначе при определении каталога или файла как место назначения вместо имени хоста и пути, он скопирует его для Вас локально, который, кажется, то, что произошло. При предоставлении командной строки, Вы использовали, мы можем указать на Вас, что произошло точно.
Править: С предоставленной командной строкой, что это делает, должен пробежаться через сетевой интерфейс, соединиться с сервером SSHD на Вашей локальной машине и затем сделать копию. Нет никакого серьезного основания для этого, так как можно скопировать его локально с cp
.
Как утверждали другие, в современных системах Unix / Linux имена файлов могут содержать любой символ, кроме \ 0
(NUL) и /
(слэш).
В дополнение к этому, стандарт POSIX определяет переносимый набор символов для имен файлов:
3.278 Переносимый набор символов имени файла
Набор символов, из которых создаются переносимые имена файлов.
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ 0 1 2 3 4 5 6 7 8 9. _ -
Последние три символа - это символы <период>, <подчеркивание> и <дефис> соответственно. См. Также Путь .
Утилита pathchk
из GNU Coreutils проверяет это при вызове с параметром -p
, а параметр -P
будет предупреждать о пустых именах файлов (которые недопустимы, но могут быть переданы в качестве аргумента в pathchk
) и именах файлов, начинающихся с дефиса ( -
).
Правильно ли использовать определенные специальные символы, как +, &, ', . (точка) и , (запятая), в основном, в именах файлов.
Да.
Правильно, но не обязательно целесообразно или удобно.
В современных файловых системах Unix и Linux можно использовать любые символы, кроме нуля и /
в имени файла.
Можно использовать ASCII-знаки препинания. Некоторые утилиты используют стопы (точка) и запятые в именах файлов, которые они создают.
Можно использовать ASCII-символы управления, однако это нецелесообразно, так как они вряд ли будут отображаться приемлемо и труднодоступны.
Можно использовать мета-символы оболочки , такие как амперсанд ASCII и апостроф ASCII. Однако это неудобно и требует, чтобы при построении команд Вы с особой осторожностью цитировали или скрывали такие символы.
Можно использовать многобайтовые символы , используя различные кодировки. Правильная интерпретация и отображение не-ASCII-символов зависит от оболочки и/или утилит. Рекомендуется ограничиться популярной кодировкой, такой как UTF-8, и установить соответствующую локаль.
У вас будут наименьшие проблемы с использованием ASCII-символов для печати, ограничивая набор знаков препинания теми, которые не являются мета-символами оболочки и не начинают имя с дефиса (или остановки - если только вы не хотите скрыть файл).
Самая безопасная ставка - это ссылка на запись в Википедии для разрешенного набора символов для любой операционной системы. Ее можно найти в здесь .
Например, для большинства unix-систем разрешённый набор символов состоит из 8 бит, а зарезервированный - из нулевого символа (NUL, '\0'
). Однако, использование специальных символов в именах файлов не является хорошей практикой, так как они создают проблему при их удалении.
Например, я могу иметь имя файла как -ramesh.txt
и пытаюсь удалить его, как показано ниже.
rm -ramesh.txt
rm: invalid option -- 'a'
Try `rm ./-ramesh.txt' to remove the file `-ramesh.txt'.
Try `rm --help' for more information.
rm "-ramesh.txt"
rm: invalid option -- 'a'
Try `rm ./-ramesh.txt' to remove the file `-ramesh.txt'.
Try `rm --help' for more information.
Мне нужно удалить файл, так как,
rm -- "-ramesh.txt"
rm: remove regular empty file `-ramesh.txt'? y
Больше подробностей можно найти в и в этом ответе .
В Linux и OS-X только
/
из набора ASCII для печати запрещено I верить. Некоторые символы (мета-символы оболочки типа*?!
) приведут к тому, что проблемы в командных строках и потребует, чтобы имя файла было надлежащим образом цитируется или сбежал.Файловые системы Linux, такие как ext2, ext3, являются агностическими (I думают, что они относятся к этому более или менее как к потоку байтов - только нули. и
/
запрещены). Это означает, что вы можете хранить имена файлов в UTF-8. кодировка. Я думаю, что оболочка или другое приложение должны знать. какую кодировку использовать для правильного преобразования имени файла для отображения или переработка.
Итак, в заключение, проблема заключается не в использовании специальных символов для имен файлов, а в том, как с ними обращаться.
Ваши исследования почти верны. Можно использовать специальные символы в именах файлов, но это не рекомендуется, так как эти символы имеют особое значение. Соглашения об именах файлов в Linux описывают и другие ограничения на имена файлов, такие как "Имена файлов никогда не должны начинаться с дефиса".
Простой пример выполнения операций командной строки со специальными символами в именах файлов.
Как личное замечание, я предпочитаю избегать специальных символов в именах файлов, поскольку они требуют особого внимания, когда эти файлы используются для любой обработки. Таким образом, убирая из процесса разработки заботу о работе со специальными символами.