Это корректно для использования определенных специальных символов при именовании имен файлов в Linux?

Для копирования файлов на той же машине Вам не было бы нужно scp вообще. Так или иначе при определении каталога или файла как место назначения вместо имени хоста и пути, он скопирует его для Вас локально, который, кажется, то, что произошло. При предоставлении командной строки, Вы использовали, мы можем указать на Вас, что произошло точно.

Править: С предоставленной командной строкой, что это делает, должен пробежаться через сетевой интерфейс, соединиться с сервером SSHD на Вашей локальной машине и затем сделать копию. Нет никакого серьезного основания для этого, так как можно скопировать его локально с cp.

18
16.09.2014, 07:17
4 ответа

Как утверждали другие, в современных системах Unix / Linux имена файлов могут содержать любой символ, кроме \ 0 (NUL) и / (слэш).

В дополнение к этому, стандарт POSIX определяет переносимый набор символов для имен файлов:

3.278 Переносимый набор символов имени файла

Набор символов, из которых создаются переносимые имена файлов.

 А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я
АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ
0 1 2 3 4 5 6 7 8 9.  _ -
 

Последние три символа - это символы <период>, <подчеркивание> и <дефис> соответственно. См. Также Путь .

Утилита pathchk из GNU Coreutils проверяет это при вызове с параметром -p , а параметр -P будет предупреждать о пустых именах файлов (которые недопустимы, но могут быть переданы в качестве аргумента в pathchk ) и именах файлов, начинающихся с дефиса ( - ).

23
27.01.2020, 19:45

Правильно ли использовать определенные специальные символы, как +, &, ', . (точка) и , (запятая), в основном, в именах файлов.

Да.

Правильно, но не обязательно целесообразно или удобно.

В современных файловых системах Unix и Linux можно использовать любые символы, кроме нуля и / в имени файла.

Можно использовать ASCII-знаки препинания. Некоторые утилиты используют стопы (точка) и запятые в именах файлов, которые они создают.

Можно использовать ASCII-символы управления, однако это нецелесообразно, так как они вряд ли будут отображаться приемлемо и труднодоступны.

Можно использовать мета-символы оболочки , такие как амперсанд ASCII и апостроф ASCII. Однако это неудобно и требует, чтобы при построении команд Вы с особой осторожностью цитировали или скрывали такие символы.

Можно использовать многобайтовые символы , используя различные кодировки. Правильная интерпретация и отображение не-ASCII-символов зависит от оболочки и/или утилит. Рекомендуется ограничиться популярной кодировкой, такой как UTF-8, и установить соответствующую локаль.

У вас будут наименьшие проблемы с использованием ASCII-символов для печати, ограничивая набор знаков препинания теми, которые не являются мета-символами оболочки и не начинают имя с дефиса (или остановки - если только вы не хотите скрыть файл).

28
27.01.2020, 19:45

Самая безопасная ставка - это ссылка на запись в Википедии для разрешенного набора символов для любой операционной системы. Ее можно найти в здесь .

Например, для большинства 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. кодировка. Я думаю, что оболочка или другое приложение должны знать. какую кодировку использовать для правильного преобразования имени файла для отображения или переработка.

Итак, в заключение, проблема заключается не в использовании специальных символов для имен файлов, а в том, как с ними обращаться.

9
27.01.2020, 19:45

Ваши исследования почти верны. Можно использовать специальные символы в именах файлов, но это не рекомендуется, так как эти символы имеют особое значение. Соглашения об именах файлов в Linux описывают и другие ограничения на имена файлов, такие как "Имена файлов никогда не должны начинаться с дефиса".

Простой пример выполнения операций командной строки со специальными символами в именах файлов.

Как личное замечание, я предпочитаю избегать специальных символов в именах файлов, поскольку они требуют особого внимания, когда эти файлы используются для любой обработки. Таким образом, убирая из процесса разработки заботу о работе со специальными символами.

4
27.01.2020, 19:45

Теги

Похожие вопросы