Чи правильно використовувати певні спеціальні символи під час іменування імен файлів у Linux?


18

Є чи це виправити , щоб використовувати деякі спеціальні символи, а +, &, ', .(точка) і ,(кома), в основному, в іменах файлів.

Я розумію , що ви можете використовувати -і _без проблем, але робити деякі дослідження , я не зміг знайти що - щось певне про інших символах; деякі кажуть, що ви можете, деякі кажуть, що ви не можете, а інші кажуть, що використовувати їх не рекомендується (що б це не означало).


Які програми ви використовуєте для роботи з цими файлами. Тільки програми, які інтерпретують деякі символи по-особливому (наприклад, оболонки на рядках без котирування), створюють проблеми. Ваша середня програма C приймає все, що не є NUL, не моргаючи оком.
Антон

9
Що ви маєте на увазі під «правильним»?
Девід Річербі

Проблема з використанням спеціальних символів у імені файлу полягає в тому, що це збільшує ймовірність того, що якийсь помилковий фрагмент коду буде неправильно керувати іменем файлу. Однак я не думаю, що жоден із перерахованих вами символів не викликає особливих проблем. У вас виникне більше проблем із пробілами, яких, як правило, слід уникати . А EOL, зокрема, слід уникати будь-якою ціною.

У Windows є більш жорсткі обмеження щодо того, що може бути у назві файлу, тому, якщо є ймовірність, що файли там потрібно буде використовувати, на це варто звернути увагу.
злий

Відповіді:


28

Чи правильно використовувати певні спеціальні символи, як +, &, ',. (крапка) і, (кома), в основному, у назви файлів.

Так.

Правильне, але не обов’язково доцільне або зручне.

У сучасних файлових системах Unix та Linux можна використовувати будь-які символи, за винятком null та/ в межах імені файлу.

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

Ви можете використовувати контрольні символи ASCII , однак це не доцільно, оскільки вони навряд чи відображатимуться прийнятно та важко використовувати.

Ви можете використовувати мета-символи оболонки, такі як ASCII ampersand та ASCII апостроф. Однак це незручно і вимагає, щоб при складанні команд ви особливо обережно процитували або уникали таких символів.

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

У вас виникне найменше проблем із використанням символів для друку ASCII, обмеження набору знаків пунктуації лише тими, що не є мета-символами оболонки, і не починати ім'я дефісом (або зупинкою - якщо ви не хочете приховати файл).


23

Як заявили інші, в сучасних системах Unix / Linux імена файлів можуть містити будь-які символи, крім \0(NUL) та /(slash).

На додаток до цього, стандарт POSIX визначає портативний набір символів для імен файлів:

3.278 Набір символів портативного файлу

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

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 . _ -

Останні три символи - це <period>, <underscore> та <hyphen> символи відповідно. Дивіться також Pathname .

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


9

Найбезпечніша ставка - це посилання на запис у вікіпедії щодо дозволеного набору символів для будь-якої операційної системи. Його можна знайти звідси .

Наприклад, для більшості систем на базі 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. Деякі символи (такі як метахарактори оболонки *?!) спричинять проблеми в командних рядках і вимагатимуть відповідного цитування або скасування імені файлу.

Файлові системи Linux, такі як ext2, ext3, є набором символів (я думаю, вони просто трактують це більш-менш як потік байтів - лише нулі і /заборонені). Це означає, що ви можете зберігати назви файлів у кодуванні UTF-8. Я вважаю, що оболонка чи інша програма повинні знати, яке кодування використовувати для правильного перетворення імені файлу для відображення чи обробки.

Отже, підсумовуючи, проблема полягає не у використанні спеціальних символів для імен файлів, а в тому, як з ними поводитися.


З цієї причини ("як поводитися з ними") я майже виключно використовую лише букви, цифри, підкреслення та періоди, якщо тільки полегшити життя, коли згодом вирішу, що мені потрібно використовувати програми командного рядка, щоб робити речі до моїх файлів (який, здається, завжди виникає хоча б раз).
фірфокс

19
Не обстоювати назви файлів, починаючи з, -а просто для точності: 1) цитати навколо цього імені файлу вам точно не потрібні, 2) замість того, щоб використовувати спеціальний --аргумент, ви можете робити саме те, що rmсаме пропонує:, rm ./-ramesh.txtтому вам не потрібно робити це саме так, як ви пропонуєте.
Michał Politowski

@ MichałPolitowski Не тільки котирування вам не потрібні, вони мають точно нульовий ефект.
ctrl-alt-delor

4

Ваше дослідження майже вірно. У назвах файлів можна використовувати спеціальні символи, але це не бажано, оскільки ці символи мають особливе значення. Конвенції про іменування файлів в Linux також описують інші обмеження на імена файлів, наприклад "Імена файлів ніколи не повинні починатися дефісом".

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

Як особиста примітка, я вважаю за краще уникати спеціальних символів у назвах файлів, оскільки вони вимагають особливої ​​уваги, коли ці файли використовуються для будь-якої обробки. Таким чином, знімає занепокоєння стосунки зі спеціальними персонажами з процесу розробки.


1
Так що ваш рада буде використовувати тільки -, _і .(точку) в іменах файлів?
Кріс Кляйн

@ChrisKlein, так, хоча не на початку імені файлу.
Simply_Me

Особливе значення має в програмі (наприклад, ваша оболонка), а не ім'я файлу. Майже всі програми на U & L не піклуватися про характерах на всіх тих пір, поки не NUL в імені файлу.
Антон

@Anthon, так, моя оболонка, як описано у посиланні.
Simply_Me

2
Як особисту примітку, я рекомендую розробникам назвати батьківську папку свого проекту чимось на зразок "föλder \ t☃" - щоб вони негайно помітили, чи роблять помилку, яка ламається на такі імена файлів, замість публікації зламаного коду чи двійкових файлів що іншим доводиться обходитись. Використання цього не є проблемою, доки це єдиний, який починається з 'f', заповнення вкладки в будь-якій оболонці вводитиме важко набір тексту.
Петріс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.