Có lệnh nào cho tôi biết trong thư mục cụ thể loại tệp nào tồn tại không?
Tôi có thể tìm ra loại tệp bằng cách sử dụng một lệnh như od -c myfile | less.
Nhưng tôi không biết làm thế nào để làm điều đó cho tất cả các tệp trong một thư mục.
Có lệnh nào cho tôi biết trong thư mục cụ thể loại tệp nào tồn tại không?
Tôi có thể tìm ra loại tệp bằng cách sử dụng một lệnh như od -c myfile | less.
Nhưng tôi không biết làm thế nào để làm điều đó cho tất cả các tệp trong một thư mục.
Câu trả lời:
Mặc dù od -cthực sự sẽ hiển thị nội dung của một tệp, nhưng nó không phải là một cách tốt để có được loại tệp của nó. Mặc dù một số tệp sẽ chứa một tiêu đề với loại tệp, nhưng không phải tất cả sẽ. Một cách tốt hơn là lệnh file:
$ echo "hello" > foo.txt
$ file foo.txt
foo.txt: ASCII text
Vì vậy, để có được danh sách tất cả các loại tệp trong một thư mục, bạn có thể làm:
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;: lặp qua tất cả mọi thứ trong dir( dirchỉ là một ví dụ, bạn nên thay đổi tên này thành tên của thư mục thực tế bạn muốn tìm kiếm), lần lượt lưu từng mục$filefile "$file": chạy filetrên từng mục được tìm thấy.cut -d: -f 2: chỉ in trường thứ hai (các trường được xác định bởi :)sed 's/^ //; s/ +/ /g' : xóa khoảng trắng từ đầu dòng và chuyển đổi các khoảng trắng liên tiếp thành một khoảng trắng.sort -u : loại bỏ các loại tệp trùng lặpdir/, đó chỉ là một tên ví dụ, bạn sẽ cần phải thay đổi tên đó thành tên của một thư mục thực: for file in /home/alex/*; do ... doneví dụ.
sort -uchí sẽ loại bỏ chúng, các dòng phải khác nhau (chúng cũng có thể có một số lượng không gian khác nhau, làm cho chúng không giống nhau).
Tôi có thể sẽ làm một cái gì đó như thế này -
find . -type f -exec file {} \;
Điều đó sẽ tìm kiếm từ đường dẫn hiện tại, cho các tệp (ví dụ: không có thư mục) và sau đó thực thi filelệnh trên mỗi tệp.
Thử đi:
ls | xargs file -b | sort | uniq
Làm thế nào nó hoạt động:
ls : liệt kê nội dung thư mục
tệp -b : xác định loại tệp; không thêm tên tập tin vào dòng đầu ra
sắp xếp : sắp xếp các dòng
uniq : bỏ qua các dòng lặp lại
file -b *thay vì ls | xargs file -b, để tránh phân tích cú pháp ls.