bash

2013-05-03 23 views
5

'daki tüm alt dizinlerdeki tüm dosyaların listesini oluşturun. Bash'da betikleri yazmaya çalışıyorum. Bu, tüm alt dizinlerin üzerinde yer alan, belirli bir yoldan başlayıp, geçerli dizindeki tüm dosyaların md5 toplamları ile liste oluşturacak.bash

Ben ls -R gibi bir şey gerekiyor, ama nasıl başlayacağımı bilmiyorum find ile bunu yapmanın çok kolay bir yolu yoktur

cevap

6

: Komut tüm dosyaları bulur

find . -type f -exec md5 {} \; 

(-type f) ve her dosyadaki md5 komutunu çalıştırır (-exec md5 {} \;).

+0

Güzel kaldırmak, ama o bile gizli dizinleri, tüm dosyaları üzerinde döngü oluyor. Sadece normal dizinler üzerinde döngü yapmak için herhangi bir yolu var mı? – Maj0r

+1

“.” Ile, -path değil * /. */* ”' Ile başlayan arama dizinlerini ve '.not -name ile'. 'Ile başlayan dosyaları barındıran dosyaları kaldırabilirsiniz. *" ' – jbr

+0

Şunun için teşekkürler yardım et. Şimdi mükemmel çalışıyor – Maj0r

1

Orada ağaç adında bir programı da, ancak sadece kabuk yerleşikleri ile simüle edebilirsiniz: olarak

Onun değil tam bir yol bağımsız değişken gerektirir

#!/bin/sh 
DIR=${1:-`pwd`} 
SPACING=${2:-|} 
cd $DIR 
for x in * ; do 
    [ -d "$DIR/$x" ] && echo "$SPACING\`-{$x" && $0 "$DIR/$x" "$SPACING " || \ 
    echo "$SPACING $x : MD5=" && md5sum "$DIR/$x" 
done 

Not (veya geçerli dizinin hiçbiri) buldukça hızlıdır (ancak kodun daha karmaşık olmasını hızlandıracak pek çok yol vardır), ancak ağaç yapısının grafiksel bir sunumunu verir. Sen adding- && [ ! -L "$DIR/$x" ] veya tek liste dizinlere Sembolik takip etmek değiştirebilirsiniz: || echo $SPACING $x

+0

Bu soruya nasıl cevap veriyor? –

+0

@ AdrianFrühwirth Evet, ilk okunan md5sum bölümünü özledim, ancak tüm alt dizinleri kapatan bir kabuk betiği ... sadece "echo" $ SPACING $ x "' gibi bir şeyden sonra md5sum'u dosya satırına eklemeniz gerekiyor && md5sum "$ DIR/$ x" '... bunun tam yol argümanını da aldığını söylemeyi unuttu – technosaurus