Linux имя для всех файлов

5.2. Имена файлов в Linux

5.2. Имена файлов в Linux

По сравнению с Windows в Linux несколько другие правила построения имен файлов, вам придется с этим смириться. Начнем с того, что в Linux нет такого понятия, как расширение имени файла. В Windows, например, для файла Document1.doc именем файла является фрагмент Document 1, а doc — это расширение. В Linux Document1.doc — это имя файла, никакого расширения нет.

Максимальная длина имени файла — 254 символа. Имя может содержать любые символы (в том числе и кириллицу), кроме / ? * » |. Но кириллицу в именах файлов я бы не рекомендовал вообще. Впрочем, если вы уверены, что не будете эти файлы передавать Windows-пользователям (на флешке, по электронной почте) — используйте на здоровье. А при обмене файлами по электронной почте (кодировка-то у всех разная, поэтому вместо русскоязычного имени пользователь может увидеть абракадабру) имя файла лучше писать латиницей.

Также вам придется привыкнуть к тому, что Linux чувствительна к регистру в имени файла: FILE.txt и FiLe.Txt — это два разных файла.

Разделение элементов пути осуществляется символом / (прямой слэш), а не (обратный слэш), как в Windows.

Данный текст является ознакомительным фрагментом.

Продолжение на ЛитРес

Читайте также

Полные имена файлов

Полные имена файлов Полное имя файла можно получить, используя функцию GetFullPathName. Функция GetShortPathName возвращает имя файла в формате DOS 8.3, в предположении, что данный том поддерживает короткие имена файлов.В NT 5.1 была введена функция SetFileShortName, позволяющая изменить

Имена файлов

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

IPLabs Linux Team: начало русского Linux’а

IPLabs Linux Team: начало русского Linux’а Следующая веха на пути русского Linux’а – 1998 год, когда фирма IPLabs (точнее, ее подразделение – IPLabs Linux Team) совместно с Институтом логики (на самом деле это были одни и те же люди – Алексей Новодворский, Алексей Смирнов и Юрий Девяткин с

4.4. Стандартные имена устройств в Linux

4.4. Стандартные имена устройств в Linux Как уже отмечалось раньше, все устройства в Linux являются файлами. Файлы устройств находятся в специальном каталоге /dev. Для просмотра данного каталога удобнее всего использовать команду mc. Запустите mc и перейдите в каталог /dev. Если

1.1.2. Имена разделов в ОС Linux

1.1.2. Имена разделов в ОС Linux Linux представляет наименования разделов как имена файлов, в виде /dev/xxyN, где:? /dev — это каталог, в котором расположены все файлы, связанные с устройствами;? xx — две буквы названия раздела, указывающие тип устройства, на котором размещается раздел.

Длинные и короткие имена файлов

Длинные и короткие имена файлов Запрещение длинных имен файловВы можете запретить длинные имена файлов в Windows, заставив тем самым генерировать имена в формате 8.3 (DOS-овский формат). Для этого в разделе HKLMSystemCurrentControlSetcontrolFileSystemнадо изменить параметр °Win31FileSystem°, присвоив ему

Читайте также:  Драйвера для hp designjet 500 для windows 10 x64

2.2. Имена IPC

2.2. Имена IPC В табл. 1.2 мы отметили, что три типа IPC стандарта Posix имеют идентификаторы (имена), соответствующие этому стандарту. Имя IPC передается в качестве первого аргумента одной из трех функций: mq_open, sem_open и shm_open, причем оно не обязательно должно соответствовать реальному

Пример A-4. blank-rename: переименование файлов, чьи имена содержат пробелы

Пример A-4. blank-rename: переименование файлов, чьи имена содержат пробелы Это даже более простая версия предыдущего примера.#! /bin/bash# blank-rename.sh## Заменяет пробелы символом подчеркивания в именах файлов в текущем каталоге.ONE=1 # единственное или множественное число (см.

2.2 Имена

2.2 Имена Имя (идентификатор) состоит из последовательности букв и цифр. Первый символ должен быть буквой. Символ подчерка _ считается буквой. С++ не налагает ограничений на число символов в имени, но некоторые части реализации находятся вне ведения автора компилятора (в

У6.5 Имена

У6.5 Имена Разработайте абстрактный тип данных ИМЯ, в котором учитывались бы различные компоненты полного имени

Источник

Как получить только имя файла в Linux ‘find’?

Я использую поиск для всех файлов в каталоге, поэтому я получаю список путей. Однако мне нужны только имена файлов. т.е. я получаю ./dir1/dir2/file.txt и хочу получить file.txt

В GNU find вы можете использовать -printf параметр для этого, например:

Если в вашем поиске нет опции -printf, вы также можете использовать basename:

Используйте -execdir который автоматически содержит текущий файл <> , например:

Вы также можете использовать $PWD вместо . (в некоторых системах это не приведет к появлению дополнительной точки спереди).

Если у вас все еще есть лишняя точка, вы можете запустить:

-execdir Первична идентична -exec первичный за исключением того , утилита будет выполнена из каталога, держит текущий файл .

Когда используется + вместо ; , то <> заменяется таким количеством путей, сколько возможно для каждого вызова утилиты. Другими словами, он напечатает все имена файлов в одну строку.

Если вы используете GNU найти

Или вы можете использовать язык программирования, такой как Ruby (1.9+)

Если вам нравится решение bash (как минимум 4)

Если вы хотите выполнить какое-либо действие только с именем файла, использовать basename может быть сложно.

будет просто повторять базовое имя /my/found/path . Не то, что мы хотим, если мы хотим выполнить по имени файла.

Но вы можете затем xargs на выходе. например, чтобы убить файлы в каталоге, основываясь на именах в другом каталоге:

/clang+llvm-3.3/bin/ -type f -exec basename <> \;

На Mac (BSD find ) используйте:

-exec и -execdir медленно, xargs это король.

xargs Параллелизм также помогает.

Как ни странно, я не могу объяснить последний случай xargs без -n1 . Это дает правильный результат, и это самый быстрый ¯\_(ツ)_/¯

( basename принимает только 1 аргумент пути, но xargs отправит их все (на самом деле 5000) без -n1 . не работает на linux и openbsd, только macOS . )

Несколько больших цифр из системы Linux, чтобы увидеть, как это -execdir помогает, но все же намного медленнее, чем параллель xargs :

Честно говоря, basename и dirname решения проще, но вы также можете проверить это:

Как уже отмечали другие, вы можете комбинировать find и basename , но по умолчанию basename программа будет работать только по одному пути за раз, поэтому исполняемый файл придется запускать один раз для каждого пути (используя либо find . -exec или find . | xargs -n 1 ), что потенциально может быть медленным.

Если вы используете -a опцию on basename , то он может принимать несколько имен файлов за один вызов, что означает, что вы можете затем использовать xargs без -n 1 , чтобы сгруппировать пути вместе в гораздо меньшее количество вызовов basename , что должно быть более эффективным.

Читайте также:  Getting started with windows sdk

Здесь я включил -print0 и -0 (который должен использоваться вместе), чтобы справиться с любым пробелом в именах файлов и каталогов.

Вот сравнение времени, между xargs basename -a и xargs -n1 basename версиями. (Для сравнения «похоже на аналогию» время, указанное здесь, указано после первоначального фиктивного запуска, так что они оба выполняются после того, как метаданные файла уже скопированы в кэш ввода / вывода.) Я передал выходные данные в cksum в обоих случаях просто для демонстрации того, что вывод не зависит от используемого метода.

Как вы можете видеть, это действительно намного быстрее, чтобы избежать запуска basename каждый раз.

Источник

Как получить только имя файла с linux ‘find’?

Я использую find для всех файлов в каталоге, поэтому я получаю список путей. Однако, мне нужны только имена файлов. то есть я получаю ./dir1/dir2/file.txt и я хочу сделать file.txt

6 ответов

в GNU find можно использовать

Если у вашей находки нет опции-printf, вы также можете использовать basename:

Если вы используете GNU find

или вы можете использовать язык программирования, таких как Ruby(1.9+)

Если вам нравится решение bash (по крайней мере 4)

использовать -execdir , который автоматически закрывает текущий файл в <> , например:

вы также можете использовать $PWD вместо . (в некоторых системах он не будет производить дополнительную точку спереди).

если у вас все еще есть дополнительная точка, в качестве альтернативы вы можете запустить:

на -execdir primary идентичен -exec primary за исключением этой утилиты будет выполняться из каталога, который закрывает текущий файл.

при использовании + вместо ; , потом <> заменяется как много путей, для каждого вызова утилиты. Другими словами, он будет печатать все имена файлов в одной строке.

если вы хотите выполнить какое-либо действие только против имени файла, используя basename может быть жестким.

будет просто эхо basename /my/found/path . Не то, что мы хотим, если мы хотим выполнить с именем файла.

но вы можете тогда xargs выход. например, чтобы убить файлы в dir на основе имен в другом dir:

Я нашел решение (на странице makandracards), которое дает только самое новое имя файла:

Источник

Linux шаблоны имен файлов

Linux шаблоны имен файлов — определённые символьные последовательности дающие возможность обращаться к более чем одному файлу по имени с использованием специальных символов — шаблонов. С помощью этих шаблонов (wildcards) можно обращаться ко всем файлам, имена которых содержат символы указанные в шаблоне; важное свойство большинства командных оболочек системы Linux.

Шаблоны имен файлов строятся с помощью специальных символов «*» и «?». Значок «*» используется для замены произвольной строки символов. В Linux

  • «*» — соответствует всем файлам, за исключением скрытых;
  • «.*» — соответствует всем скрытым файлам (но также текущему каталогу «.» и каталогу уровнем выше «..»: не забывайте об этом!);
  • «*.*» — соответствует только тем файлам и каталогам, которые имеют «.» в середине имени, или оканчиваются на точку;
  • «p*r» — соответствует и «peter» и «piper»;
  • «*c*» — соответствует и «picked» и «peck».

Значок ? заменяет один произвольный символ, поэтому index?.htm будет соответствовать именам index0.htm, index5.htm и indexa.htm.

Кроме «*» и «?» в Linux при задании шаблонов имен можно использовать квадратные скобки [], в которых дается либо список возможных символов, либо интервал, в который должны попадать возможные символы. Например, [abc]* соответствует всем именам файлов, начинающимся с a, b, c; *[I-N1-3] соответствует файлам, имена которых оканчиваются на I, J, K, L, M, N, 1, 2, 3.

Читайте также:  Changing drive letters windows

Подробнее

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

Приведём простой пример. Допустим, у пользователя Ларри в

текущем каталоге имеются файлы frog, joe и

Для того, чтобы обратиться ко всем файлам, в имени которых

содержится символ o, надо использовать команду

Можно видеть, что всякий раз, когда в имени встречается символ

*, он заменяется всеми возможными вариантами, которые

встречаются в именах файлов в текущем каталоге.

Шаблон, состоящий из единственного символа *,

подходит ко всем именам файлов, поскольку этому шаблону подходят

все последовательности символов. Пример:

Приведём ещё несколько примеров:

последовательность имён файлов называется расширением шаблона (wildcard expansion). Расширение шаблона производится командной оболочкой. Очень важно знать, что отдельная команда, такая как ls , никогда не « видит » символ * в списках своих параметров. Именно командная оболочка производит расширение шаблона таким образом, что будут перечислены все удовлетворяющие шаблону имена файлов. Таким образом, команда

расширяется командной оболочкой в команду

Сделаем важное замечание о шаблоне *: он не распознает

имена файлов, которые начинаются с одной точки (.). Эти файлы рассматриваются как скрытые (hidden). Скрытость этих файлов заключается в том, что они не включаются в список, выдаваемый обычными командами ls , и не распознаются шаблонами, содержащими

Приведём пример. Раньше мы говорили, что в каждом каталоге есть

два специальных элемента: элемент . обозначает текущий каталог, а элемент .. обозначает родительский каталог. Однако, при использовании команды ls эти два

элемента в списке не появляются:

Однако, если с командой ls использовать опцию -a, то имена

файлов, начинающихся с символа ., окажутся в списке. Попробуем

Этот список содержит два специальных элемента:

. и .., а также два других « скрытых » файла: .bash_profile и .bashrc. Эти два файла являются файлами начальной конфигурации для командной оболочки bash и читаются

при входе пользователя larry в систему.

Заметим, что когда мы использовали шаблон *, в списке не

появилось ни одного файла, имя которого начиналось с символа

Это предусмотрено механизмом безопасности: если бы шаблон

* подходил бы и к именам файлов, начинающихся символом ., он бы также подходил и к именам каталогов . и ... Это было бы опасно при

использовании некоторых команд.

Ещё одним специальным символом в шаблонах является символ

?. Шаблон ? расширяется до ровно одного символа. Таким образом, команда ls ? выведет список всех файлов, имена которых состоят из одного символа. Команда ls termca? включит в список файл termcap, но не включит файл termcap.backup. Приведём ещё один

Как мы видим, шаблоны позволяют обращаться сразу к нескольким

файлам. Например, выше уже говорилось, что команды cp и mv в действительности могут копировать или переносить больше одного

файла за один раз. Например, команда

копирует все файлы в каталоге /etc, имя которых начинается с

символа s, в каталог /home/larry. В действительности, формат

команды cp является следующим:

где files — список имён файлов, которые надо копировать, а destination — файл или каталог, куда надо копировать. Команда mv имеет аналогичный синтаксис.

При копировании или переносе более чем одного файла аргумент

destination должен быть именем каталога. Только ровно один

файл может быть скопирован или перенесён в другой файл.

Источник

Оцените статью