มีคำสั่งใดบ้างที่บอกฉันในไดเรกทอรีเฉพาะว่ามีไฟล์ประเภทใดบ้าง
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
เป็นเพียงตัวอย่างคุณควรเปลี่ยนสิ่งนี้เป็นชื่อของไดเรกทอรีจริงที่คุณต้องการค้นหา) บันทึกแต่ละรายการตามลำดับ$file
file "$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 : รายการเนื้อหาไดเรกทอรี
ไฟล์ -b : กำหนดประเภทของไฟล์; ห้ามเติมชื่อไฟล์ลงในบรรทัดเอาต์พุต
sort : เรียงลำดับบรรทัด
uniq : ละเว้นบรรทัดซ้ำ
file -b *
แทนเพื่อหลีกเลี่ยงการแยกls | xargs file -b
ls