Meskipun od -cmemang akan menampilkan konten file, itu bukan cara yang baik untuk mendapatkan jenis file. Sementara beberapa file akan berisi header dengan tipe file, tidak semua akan. Cara yang lebih baik adalah perintah file:
Jadi, untuk mendapatkan daftar semua jenis file dalam direktori, Anda dapat melakukan:
for file in dir/*; do file "$file" | cut -d: -f 2; done | sort -u
Contoh output:
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
Penjelasan
for file in dir/*; do ... done;: iterate through everything in dir( dirhanya sebuah contoh, Anda harus mengubahnya ke nama direktori aktual yang ingin Anda cari), menyimpan setiap item pada gilirannya sebagai$file
file "$file": jalankan filedi setiap item yang ditemukan.
cut -d: -f 2: hanya cetak bidang kedua (bidang yang ditentukan oleh :)
sed 's/^ //; s/ +/ /g' : hapus spasi dari awal baris dan konversi spasi berurutan menjadi satu ruang.
terima kasih, Tapi aku benar-benar menyalin dan melewati "untuk file dalam dir / *; lakukan file" $ file "| cut -d: -f 2 | sort -u; selesai" di terminal saya dan saya mendapat "KESALAHAN"
Mohammad Reza Rezwani
2
@ alex pertama-tama, harap selalu menyebutkan kesalahan yang Anda dapatkan, mengatakan bahwa Anda mendapat "KESALAHAN" tidak terlalu berguna. Bagaimanapun, kesalahan itu mungkin karena Anda tidak memiliki direktori bernama dir/, itu hanya nama contoh, Anda perlu mengubahnya ke nama direktori nyata: for file in /home/alex/*; do ... donemisalnya.
terdon
terima kasih, Jika Anda melakukan pekerjaan saya yang salah (... Saya pikir dir adalah perintah seperti ls bukan direktori -lalu- juga saya pikir lebih baik untuk mengedit jawaban Anda) Anda hanya melihat "KESALAHAN" dan tidak ada yang lain.
Mohammad Reza Rezwani
kerja bagus, thnaks, tapi saya melihat misalnya empat baris "file Audio dengan ID3 versi 2.3.0, berisi" atau lebih dari satu "Media ISO, sistem MPEG v4, versi 2". Saya tidak yakin tentang "hapus duplikat".
Mohammad Reza Rezwani
@ Alex cukup adil, jawabannya diedit. Anda seharusnya tidak mendapatkan duplikat. The sort -uakan menghapusnya, garis harus berbeda (mereka mungkin juga memiliki nomor yang berbeda dari ruang, yang membuat mereka non-identik).
terdon
3
Saya mungkin akan melakukan sesuatu seperti ini -
find . -type f -exec file {} \;
Itu akan mencari dari jalur saat ini, untuk file (misalnya tidak ada direktori) dan kemudian jalankan fileperintah pada setiap file.
dir/
, itu hanya nama contoh, Anda perlu mengubahnya ke nama direktori nyata:for file in /home/alex/*; do ... done
misalnya.sort -u
akan menghapusnya, garis harus berbeda (mereka mungkin juga memiliki nomor yang berbeda dari ruang, yang membuat mereka non-identik).Saya mungkin akan melakukan sesuatu seperti ini -
Itu akan mencari dari jalur saat ini, untuk file (misalnya tidak ada direktori) dan kemudian jalankan
file
perintah pada setiap file.sumber
Coba ini:
Bagaimana itu bekerja:
ls : daftar isi direktori
file -b : tentukan jenis file; jangan tambahkan nama file ke baris keluaran
sort : sort lines
uniq : hapus baris yang diulang
sumber
ls
file -b *
alih-alihls | xargs file -b
, untuk menghindari penguraianls
.