2014-12-24 14 views
6

..... (Bu biraz kaba ve hazır olabilir yolunda derin dizini baskı ve biraz hacky ancak bir giriş dosyası okur ve bir dizin ağacı oluşturmak için giriş çizgilerinin her birinde 'ağaç' işlevini kullanır. Bu ağaç daha sonra bir çıktı dosyasına (klasörün boyutuyla birlikte) yazdırılır. BASH - Sadece ÇOK yararlı bir işleve sahip benim Bashrc dosyasında <p></p> biraz yardıma ihtiyacım

multitree() 
{ 
    while read cheese 
    do 
     pushd . > /dev/null 
     pushd $cheese > /dev/null 
     echo -e "$cheese \n\n" >> ~/Desktop/$2.txt 
     tree -idf . >> ~/Desktop/$2.txt 
     echo -e "\n\n\n" >> ~/Desktop/$2.txt 
     du -sh --si >> ~/Desktop/$2.txt 
     echo -e "\n\n\n\n\n\n\n" >> ~/Desktop/$2.txt 
     popd > /dev/null 
    done < $1 
     cat ~/done 
} 

Bu

sonu gibi bir zaman tasarrufu ve aşağıdaki gibi bir parçacığını verir:

./foo 
./foo/bar 
./foo/bar/1 
./foo/bar/1/2 

vs vs ....

Ancak, ilk (ve en çok sıkıcı) Yapmam gereken şey, yalnızca en derin klasör yolunu bırakan tüm girişleri kaldırmaktır (Yukarıdaki örneği kullanarak sadece indirgenir ./foo/bar/1/2)

Dosyayı daha önce işleme koymanın bir yolu var mı? ağaçtan sonra Sadece en derin seviyeleri basmak için işlev?

Python'un daha iyi bir iş çıkarması gibi bir şey biliyorum, ama benim sorunum hiç python kullanmıyorum Ve iş sistemlerinin python'u çalıştırmama izin verdiğinden emin değilim ... kendimizi değiştirmemize izin verdiler. bu yüzden çok endişelenmiyorum!

Şimdiden teşekkürler çocuklar !!

Owen.

sadece her satırında "/" karakter sayısını saymak gerekir:

cevap

15

İsterseniz

find . -type d -links 2 

bir dizin ile . değiştirin kullanabilirsiniz.

DÜZENLEME: Açıklama:

find verilen bir filtreyle eşleşen dosyalar için bir dizin arar. Bu durumda, dizin . ve filtre -type d -links 2'dur.Adlarının iki (sert) bağlantıları olanlar için dizinleri

-links 2 filtreler için

-type d filtreler. Etkin olarak, bu alt dizinleri olmayan tüm dizinler için filtreler, çünkü yalnızca iki tane var: Üst dizindekiler ve kendi içinde . bağlantısı. Alt dizinlere sahip olanlar ayrıca kendi alt dizinlerinde .. bağlantılarına sahiptir.

+0

Bunu bana açıklamak zorunda kalabilirsiniz ....... Adam bul sayfasına baktım ama ne demek istediğimi anlamama yardımcı olmadı ... –

+0

Biraz düzenledim. Gerçi açıklamak için pek bir şey yok. – Wintermute

+0

'Bul. - 2'ler yeterli olmaz. Dokunmadan sonra dene./Abcd; ln./abcd./pqrs' Not: '' ln' değil 'ln -s'… Ama +1 bu bilgi için :-) – anishsane

2

Bir ipucu.

Geçerli satırda, önceki satırda "/" karakterlerinden daha az sayıda satır varsa, önceki satır, hiyerarşinin kendi bölümünde "en derin" dizin olur.

Bu satır ve daha az "/" karakterli sonraki satırlar, dizin hiyerarşisinin tamamında en derin dizin OLMAYACAKTIR. Aynı sayıda "/" karakterli veya daha büyük bir satır alır almaz, "sıfırlama" yapabilir ve bir kez daha, daha az sayıda "/" karakter içeren ilk satır için bir göz atmaya devam edebilirsiniz.

Son olarak, önemsiz durumu ele almanız gerekir: ağaç çıktınızda yalnızca bir satır, geçerli dizinin alt dizinleri yoktur, bu nedenle varsayılan olarak kazanır.

Bunu uygulayabileceğiniz diğer bir yolu aşağıdaki ifadeyi dikkate alarak geçerli:

bir dizinin adı da "/" karakteri ile devam listedeki başka dizinin tam önek olarak bulunuyorsa, o zaman değil hiyerarşinin en derin dizini.

+0

Merhaba, teşekkürler! ama bu çoklu alt dizinlerle nasıl çalışır? Her alt dizinin en derin seviyesini .... mümkün olmamasına inanmaya başlıyorum .... –

+0

Aşağıdaki dizinler listesi verildi: ./one, ./one/subdir, ./two, ./two/subdir İki önerimden herhangi birinin iki alt anahtarı doğru olarak tanımlamayacağına neden inandığını açıklayabilir misiniz? –

İlgili konular