Есть ли какая-либо команда, которая сообщает мне в определенном каталоге, какие типы файлов существуют?
Я могу узнать тип файла, используя команду, подобную od -c myfile | less
.
Но я не знаю, как это сделать для всех файлов в каталоге.
Хотя od -c
действительно покажет содержание файла, это не хороший способ получить его тип файла. В то время как некоторые файлы будут содержать заголовок с типом файла, не все будут. Лучшим путем является команда file
:
$ echo "hello" > foo.txt
$ file foo.txt
foo.txt: ASCII text
Так, для получения списка всех типов файлов в каталоге можно сделать:
for file in dir/*; do file "$file" | cut -d: -f 2; done | sort -u
PNG image data, 1500 x 500, 8-bit/color RGBA, non-interlaced
ASCII text
directory
GIF image data, version 89a, 22 x 22
ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=becf821e4d814fdb69306d0b3f686eb06992f5e5, stripped
for file in dir/*; do ... done;
: выполните итерации через все в dir
(dir
просто пример, необходимо изменить это на название фактического каталога, который Вы хотите перерыть), сохраняя каждый объект в свою очередь как $file
file "$file"
: выполненный file
на каждом из найденных объектов. cut -d: -f 2
: распечатайте только второе поле (поля, определенные :
)sed 's/^ //; s/ +/ /g'
: удалите пробелы с начала строки и преобразуйте последовательные пробелы в одиночный пробел.sort -u
: удалите типы дубликата файлаЯ, вероятно, сделал бы что-то вроде этого -
find . -type f -exec file {} \;
, Который будет искать от текущего пути, для файлов (например, никакие каталоги) и затем выполняться эти file
команда на каждом файле.
Попробуйте это:
ls | xargs file -b | sort | uniq
, Как это работает:
ls: содержание каталога списка
файл-b : определите тип файла; не предварительно ожидайте имена файлов для вывода строк
вид : строки вида
uniq: опустите повторенные строки