Как отобразить файл с ls?

Возможно, OP не знал о новой отдельной панели меню в Unity. Сначала бросил меня в петлю. Если это так, имейте в виду, что он находится в верхней части экрана, независимо от размера или размещения окна вашего браузера файлов, и по умолчанию он автоматически скрывает. Переместите указатель мыши в верхнюю часть экрана, и он появится.

8
задан 30 April 2018 в 01:00

6 ответов

Я думаю, что лучший способ показать тип файла - использовать эту команду:

file <filename>

Если вы хотите перечислить типы всех файлов в каталоге, просто используйте:

file *

Подробнее о аргументах см.:

man file
6
ответ дан 17 July 2018 в 16:06

Одной из форм файла является то, является ли файл обычным файлом, каталогом, устройством, символической ссылкой и т. д. ls может показать это с помощью опций -l или -F.

Опция -l покажет тип файла как один символ в начале списка, например: $ ls -l drwxrwxr-x 2 user user 4096 Dec 11 00:18 DIR -rw-rw-r-- 1 user user 0 Dec 11 00:18 FILE lrwxrwxrwx 1 user user 4 Dec 11 00:19 LINK -> FILE Где - является обычным файлом, d является каталогом, а l является символической ссылкой. Опция -F покажет тип файла как суффикс, например: $ ls -F DIR/ FILE LINK@ Если суффикс не является обычным файлом, / является каталогом, а @ является символической ссылкой.

Дополнительная информация об этом доступна в info coreutils 'ls invocation', подытоженной здесь:

Для info coreutils 'ls invocation' :

‘-’ regular file ‘b’ block special file ‘c’ character special file ‘C’ high performance (“contiguous data”) file ‘d’ directory ‘D’ door (Solaris 2.5 and up) ‘l’ symbolic link ‘M’ off-line (“migrated”) file (Cray DMF) ‘n’ network special file (HP-UX) ‘p’ FIFO (named pipe) ‘P’ port (Solaris 10 and up) ‘s’ socket ‘?’ some other file type

Для -F:

nothing for regular files ‘*’ regular files that are executable ‘/’ directories ‘@’ symbolic links ‘|’ FIFOs ‘=’ sockets ‘>’ doors
3
ответ дан 17 July 2018 в 16:06

Для ясности я хочу указать, что вы можете видеть тип файла в основном смысле с помощью ls, используя флаг -F (классифицировать), который добавляет символ к имени файла в зависимости от его типа:

‘-F’ ‘--classify’ ‘--indicator-style=classify’ Append a character to each file name indicating the file type. Also, for regular files that are executable, append ‘*’. The file type indicators are ‘/’ for directories, ‘@’ for symbolic links, ‘|’ for FIFOs, ‘=’ for sockets, ‘>’ for doors, and nothing for regular files.

Вы можете видеть, что информация немного менее критически отображается в первой букве вывода ls -l. тип файла описывает это более подробно.

Но я не думаю, что это то, что вы подразумеваете под типом файла. Команда ls не просматривает обычные файлы - только в списках каталогов (которые хранят имена файлов) и inodes (которые хранят метаданные, включая «тип» в указанном выше смысле).

Итак, Команда ls не может отображать тип файла в том смысле, что это изображение в формате JPG или двоичный файл или текстовый файл или документ LibreOffice, потому что у него нет этой информации.

Для этого, как указано в ответе о сигнире, вам нужна команда file, которая рассматривает первые 50-100 КБ или около того содержимого файлов, чтобы определить их тип.

7
ответ дан 17 July 2018 в 16:06

Я думаю, что лучший способ показать тип файла - использовать эту команду:

file <filename>

Если вы хотите перечислить типы всех файлов в каталоге, просто используйте:

file *

Подробнее о аргументах см.:

man file
6
ответ дан 23 July 2018 в 17:00
  • 1
    Хотя этот ответ напрямую не отвечает на вопрос OP, он показывает правильный способ нахождения типа mime файла и должен быть помечен как правильный ответ. Чтобы получить только mime type, используйте: file --mime-type filename. – Pedro Lobito 27 April 2018 в 02:56
  • 2
    @PedroLobito Я думаю, что близкий вопрос довольно хорошо охватывает file, но этот вопрос отличается. – dessert 27 April 2018 в 11:06
  • 3
    Если вы используете функцию вместо псевдонима, это будет меньше кавычек, и если вы будете использовать paste или column, вы можете улучшить выравнивание: lsf () { find -maxdepth 1 -type f -exec bash -c 'column <(ls -l "$@") <(file -b "$@" | cut -d, -f1)' _ {} + ; } Проблема выравнивания не очевидна в ответе, потому что аналогичных размеров и дат. (Это также будет немного быстрее, так как команды будут вызываться меньше раз, а не один раз для каждого файла). – muru 27 April 2018 в 13:11
  • 4
    @muru Спасибо за много хороших предложений! Этот column aproach работает для вас? Он просто печатает вывод ls -l для каждого файла, за которым следует вывод file для каждого файла для меня, как если бы оболочка просто выполняла ls -l "$@"; file -b "$@" | cut -d, -f1 ... – dessert 27 April 2018 в 14:38
  • 5
    Оно делает. paste.ubuntu.com/p/KjPthXPDPb - верхняя часть от псевдонима, а нижняя часть - это функция, оба выполняются с /etc. – muru 27 April 2018 в 15:46
  • 6
    Я думаю, что вижу проблему - если вывод column не относится к терминалу, вам нужно указать количество столбцов или он будет выводить файлы один за другим; поэтому column -c "$COLUMNS" ... должен работать в любом случае. – muru 27 April 2018 в 15:48
  • 7
    Вы запускаете (по крайней мере?) 5 процессов для каждого файла, поэтому это, вероятно, будет медленным, когда в каталоге будет много файлов ... – JanC 27 April 2018 в 22:28
  • 8
    Я проголосую за этот ответ, учитывая, что вы первыми дали ответ file. Поскольку я ответил другим, этого недостаточно (его необходимо интегрировать с ls), поэтому я держу его при голосовании. Спасибо. – user10853 30 April 2018 в 00:57

Одной из форм файла является то, является ли файл обычным файлом, каталогом, устройством, символической ссылкой и т. д. ls может показать это с помощью опций -l или -F.

Опция -l покажет тип файла как один символ в начале списка, например: $ ls -l drwxrwxr-x 2 user user 4096 Dec 11 00:18 DIR -rw-rw-r-- 1 user user 0 Dec 11 00:18 FILE lrwxrwxrwx 1 user user 4 Dec 11 00:19 LINK -> FILE Где - является обычным файлом, d является каталогом, а l является символической ссылкой. Опция -F покажет тип файла как суффикс, например: $ ls -F DIR/ FILE LINK@ Если суффикс не является обычным файлом, / является каталогом, а @ является символической ссылкой.

Дополнительная информация об этом доступна в info coreutils 'ls invocation', подытоженной здесь:

Для info coreutils 'ls invocation' :

‘-’ regular file ‘b’ block special file ‘c’ character special file ‘C’ high performance (“contiguous data”) file ‘d’ directory ‘D’ door (Solaris 2.5 and up) ‘l’ symbolic link ‘M’ off-line (“migrated”) file (Cray DMF) ‘n’ network special file (HP-UX) ‘p’ FIFO (named pipe) ‘P’ port (Solaris 10 and up) ‘s’ socket ‘?’ some other file type

Для -F:

nothing for regular files ‘*’ regular files that are executable ‘/’ directories ‘@’ symbolic links ‘|’ FIFOs ‘=’ sockets ‘>’ doors
3
ответ дан 23 July 2018 в 17:00

Для ясности я хочу указать, что вы можете видеть тип файла в основном смысле с помощью ls, используя флаг -F (классифицировать), который добавляет символ к имени файла в зависимости от его типа:

‘-F’ ‘--classify’ ‘--indicator-style=classify’ Append a character to each file name indicating the file type. Also, for regular files that are executable, append ‘*’. The file type indicators are ‘/’ for directories, ‘@’ for symbolic links, ‘|’ for FIFOs, ‘=’ for sockets, ‘>’ for doors, and nothing for regular files.

Вы можете видеть, что информация немного менее критически отображается в первой букве вывода ls -l. тип файла описывает это более подробно.

Но я не думаю, что это то, что вы подразумеваете под типом файла. Команда ls не просматривает обычные файлы - только в списках каталогов (которые хранят имена файлов) и inodes (которые хранят метаданные, включая «тип» в указанном выше смысле).

Итак, Команда ls не может отображать тип файла в том смысле, что это изображение в формате JPG или двоичный файл или текстовый файл или документ LibreOffice, потому что у него нет этой информации.

Для этого, как указано в ответе о сигнире, вам нужна команда file, которая рассматривает первые 50-100 КБ или около того содержимого файлов, чтобы определить их тип.

7
ответ дан 23 July 2018 в 17:00

Другие вопросы по тегам:

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