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
แต่เนื่องจากคุณไม่ต้องการบรรทัด filetype แต่เป็นคอลัมน์ filetype ต่อไปนี้เป็นวิธีกำจัดอักขระบรรทัดใหม่ระหว่างบรรทัด:
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" \;'