Belirli bir dizinde hangi tür dosyaların bulunduğunu söyleyen bir komut var mı?
Gibi bir komut kullanarak dosya türünü bulabilirim od -c myfile | less.
Ama bir dizindeki tüm dosyalar için nasıl yapılacağını bilmiyorum.
Belirli bir dizinde hangi tür dosyaların bulunduğunu söyleyen bir komut var mı?
Gibi bir komut kullanarak dosya türünü bulabilirim od -c myfile | less.
Ama bir dizindeki tüm dosyalar için nasıl yapılacağını bilmiyorum.
Yanıtlar:
od -cBir dosyanın içeriğini gerçekten göstermesine rağmen , dosya türünü almanın iyi bir yolu değildir. Bazı dosyalar dosya türüne sahip bir başlık içermekle birlikte, tümü içermez. Daha iyi bir yol komuttur file:
$ echo "hello" > foo.txt
$ file foo.txt
foo.txt: ASCII text
Bu nedenle, bir dizindeki tüm dosya türlerinin bir listesini almak için şunları yapabilirsiniz:
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;: her öğeyi yineleyin dir( diryalnızca bir örnektir, bunu aramak istediğiniz gerçek dizinin adıyla değiştirmeniz gerekir), her öğeyi sırayla kaydederek$filefile "$file": filebulunan öğelerin her birinde çalışır .cut -d: -f 2: yalnızca ikinci alanı yazdır (ile tanımlanan alanlar :)sed 's/^ //; s/ +/ /g' : satırın başından boşlukları kaldırır ve ardışık boşlukları tek bir boşluğa dönüştürür.sort -u : yinelenen dosya türlerini kaldırdir/, bu sadece bir örnek addı, bunu gerçek bir dizinin adıyla değiştirmeniz gerekir: for file in /home/alex/*; do ... doneörneğin.
sort -uHatlar farklı olmalıdır, bunları kaldırır (aynı zamanda boşluk bölgesinin farklı bir sayıda olabilir, bu onların aynı olmayan hale getirir).
Muhtemelen böyle bir şey yapardım -
find . -type f -exec file {} \;
Bu, geçerli yoldan dosyaları arar (örn. Dizin yok) ve sonra fileher dosyada komutu yürütür .
Bunu dene:
ls | xargs file -b | sort | uniq
Nasıl çalışır:
ls : dizin içeriğini listele
dosya -b : dosya türünü belirler; çıktı adlarının önüne dosya adları eklemeyin
sort : satırları sırala
uniq : tekrarlanan satırları atla
file -b *yerine kullanabilirsiniz . ls | xargs file -bls