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" \;'