Я не знаю, ls
способен ли отображать столбец типа файла.
Выполнение быстрого онлайн-поиска и поиска man
не выявило такой возможности. Это способно сделать это?
Пояснение: это особенно полезно, если файлы не имеют расширения.
Обновить
По состоянию на 2018-04-28 ответы были довольно интересными, однако они не дали того, что я искал. Более конкретно,
file
действительно дает фактические типы файлов, но они плохо интегрируются сls
. В частности, я используюls -lhtrpG --group-directories-first --color=always
ls -F
Этоls
решение, однако оно предоставляет символы, а не столбцы фактических типов файлов.
По этой причине я не отметил ни один из ответов как ответ, который я ищу.
command-line
ls
user10853
источник
источник
ls -lahtrpF --group-directories-first --color=always /dev
илиls -lsahG /dev
, и для программы, читаемойls -lsa /dev
. см.man ls
документацию для деталей.Ответы:
file
безусловно, правильный выбор, чтобы получить информацию о типе файла, который вы хотите. Чтобы объединить его результаты с результатами,ls
я предлагаю использоватьfind
:Это находит каждый файл в текущем каталоге и печатает вывод,
ls -dils
а также выводfile -b
для него, каждый в отдельной строке. Пример вывода:Но, поскольку вам нужна не строка типа файла, а столбец типа файла , вот способ избавиться от символа новой строки между строками:
Пример вывода:
Этот новый столбец довольно длинный, поэтому давайте вырезать все из первой запятой:
Результат этого выглядит так:
Это не совсем удобно, так как насчет
alias
? Со следующей строкой в вашем~/.bash_aliases
файле вам просто нужно запустить,lsf
чтобы получить вышеуказанный вывод для текущего каталога.источник
paste
илиcolumn
, вы можете получить лучшее выравнивание:lsf () { find -maxdepth 1 -type f -exec bash -c 'column <(ls -l "$@") <(file -b "$@" | cut -d, -f1)' _ {} + ; }
проблема выравнивания не очевидна в ответе из-за схожих размеров и дат. (Это также будет немного быстрее, так как команды будут вызываться меньше раз, чем один раз для каждого файла.)column
подход работает для вас? Он просто печатает выводls -l
для каждого файла с последующимfile
выводом для каждого файла для меня, как если бы оболочка просто делалаls -l "$@"; file -b "$@" | cut -d, -f1
…/etc
.column
вывод не на терминал, вам нужно указать количество столбцов, или он будет выводить файлы один за другим; такcolumn -c "$COLUMNS" ...
должно работать в любом случае.Я думаю, что лучший способ отобразить тип файла с помощью этой команды:
Если вы хотите перечислить типы всех файлов в каталоге, просто используйте:
Для получения более подробной информации об аргументах см .:
источник
mime type
только, использование:file --mime-type filename
.file
довольно хорошо, но этот вопрос отличается.file
ответ. Поскольку я ответил остальным, этого недостаточно (его необходимо интегрировать с ls), поэтому я оставляю его на голосование. Спасибо.file --mime /dev/*
для списка mimes в каталоге / dev вместо текущегоДля ясности я собираюсь указать, что вы можете увидеть тип файла в основном смысле
ls
, используя-F
флаг (классифицировать), который добавляет символ к имени файла в зависимости от его типа:Вы можете видеть, что информация немного менее загадочно отображается в первой букве вывода
ls -l
. Ответ wjandrea описывает это более подробно.Но я не думаю, что это то, что вы подразумеваете под типом файла. Команда
ls
не просматривает обычные файлы - только списки каталогов (в которых хранятся имена файлов) и inode (в которых хранятся метаданные, в том числе «тип» в смысле, упомянутом ранее).Таким образом,
ls
команда не может показать тип файла в том смысле, является ли он изображением JPG или двоичным файлом, или текстовым файлом, или документом LibreOffice, потому что она не имеет этой информации.Для этого, как указывает ответ Singrium , вам нужна
file
команда, которая просматривает первые 50-100 КБ или около того содержимого файлов, чтобы определить их тип.источник
Одной из форм filetype является то, является ли файл обычным файлом, каталог, устройство, символическая ссылка и т. Д.
ls
Могут показать это с помощью параметров-l
или-F
.Option
-l
покажет тип файла в виде одного символа в начале списка, например:Где
-
находится обычный файл,d
это каталог иl
символическая ссылка.Опция
-F
покажет тип файла в виде суффикса, например:Где суффикс не является обычным файлом,
/
каталогом и@
символической ссылкой.Более подробная информация об этом доступна в
info coreutils 'ls invocation'
кратком изложении здесь:Для
-l
:Для
-F
:источник