file
це, безумовно, правильний вибір, щоб отримати потрібну інформацію про тип файлу. Для комбінування його результатів із результатом ls
пропоную використовувати find
:
find -maxdepth 1 -type f -ls -exec file -b {} \;
Це знаходить кожен файл у поточному каталозі та друкує вихід ls -dils
, а також вихід file -b
для нього, кожен у власному рядку. Приклад виводу:
2757145 4 -rw-rw-r-- 1 dessert dessert 914 Apr 26 14:02 ./some.html
HTML document, ASCII text
2757135 4 -rw-rw-r-- 1 dessert dessert 201 Apr 13 15:26 ./a_text_file
UTF-8 Unicode text, with CRLF, LF line terminators
Але, оскільки ви не хочете використовувати рядок файлового типу, а скоріше стовпець файлового типу , ось спосіб позбутися символу нової лінії між рядками:
find -maxdepth 1 -type f -exec sh -c "ls -l {} | tr '\n' '\t'; file -b {}" \;
Вибірка зразка:
-rw-rw-r-- 1 dessert dessert 914 Apr 26 14:02 ./some.html HTML document, ASCII text
-rw-rw-r-- 1 dessert dessert 201 Apr 13 15:26 ./a_text_file UTF-8 Unicode text, with CRLF, LF line terminators
Цей новий стовпець досить довгий, тому давайте виріжемо все з першої коми:
find -maxdepth 1 -type f -exec sh -c "ls -l {} | tr '\n' '\t'; file -b {} | cut -d, -f1" \;
Вихід цього виглядає приблизно так:
-rw-rw-r-- 1 dessert dessert 914 Apr 26 14:02 ./some.html HTML document
-rw-rw-r-- 1 dessert dessert 201 Apr 13 15:26 ./a_text_file UTF-8 Unicode text
Це не зовсім зручно, то як щодо alias
? З наступним рядком у вашому ~/.bash_aliases
файлі вам просто потрібно виконати, lsf
щоб отримати вищенаведений вихід для поточного каталогу.
alias lsf='find -maxdepth 1 -type f -exec sh -c "ls -l {} | tr '"'\n'"' '"'\t'"'; file -b {} | cut -d, -f1" \;'