Чи є якась команда, яка вказує мені в конкретному каталозі, які типи файлів існують?
Я можу дізнатись тип файлу за допомогою команди типу od -c myfile | less.
Але я не знаю, як це зробити для всіх файлів у каталозі.
Чи є якась команда, яка вказує мені в конкретному каталозі, які типи файлів існують?
Я можу дізнатись тип файлу за допомогою команди типу 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це лише приклад, вам слід змінити це на ім'я фактичного каталогу, який ви хочете шукати), зберігаючи кожен елемент по черзі як$filefile "$file": запустіть fileкожен із знайдених елементів.cut -d: -f 2: друкувати лише друге поле (поля, визначені :)sed 's/^ //; s/ +/ /g' : видаліть пробіли з початку рядка та перетворіть послідовні пробіли в єдиний простір.sort -u : видалити повторювані типи файлівdir/, це було лише ім'я прикладу, вам потрібно буде змінити це на ім'я реального каталогу: for file in /home/alex/*; do ... doneнаприклад.
sort -uВидалять їх, лінії повинні бути різними (вони також можуть мати різну кількість прогалин, що робить їх неідентичних).
Я, мабуть, зробив щось подібне -
find . -type f -exec file {} \;
Він буде шукати файли (наприклад, відсутні каталоги) з поточного шляху, а потім виконувати fileкоманду для кожного файлу.
Спробуйте це:
ls | xargs file -b | sort | uniq
Як це працює:
ls : вміст каталогу списку
file -b : визначити тип файлу; не додавати назви файлів до вихідних рядків
сортувати : сортувати лінії
uniq : опустити повторні рядки
file -b *замість ls | xargs file -b, щоб уникнути розбору ls.