Bir ağaçtaki tüm dosyalar nasıl listelenir (bir dizin ve alt dizinleri)?


41

Bir görevim için bir ağaçtaki tüm dosyaları listelemem gerekiyor (bir dizin, tüm alt dizinleri, tüm alt dizinleri, vb.).

Onları Nautilus veya Krusader'de görmeyi tercih ederdim, ancak bir komut satırı çözümü de ilginç (bu durumda listelenecek dosyalara tam adlara, boyutlara ve değiştirme zamanlarına ihtiyacım olacak).


Bu soru bir sahiptir korkunç görüşlerin çok. Belki de en fazla yardımcı bulduğun cevabı kabul edebilirsin, başkalarına zaman kazandırmak için @Ivan?
starbeamrainbowlabs 12:18 '

Yanıtlar:


39

ağaç senin için çok uygun olacak.

sudo apt-get install tree

kullanarak tree filepathdosyaları listelemek.


27
ls -alR

Muhtemelen en basit yöntem budur. Sadece size daha fazla kontrol vermek için bir bulma betiğini çiğniyorum.


7
Ya da sadece ls -Rtüm detayları istemiyorsan.
Matthew

11
find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n"

Printf formatı ile istediğiniz kadar oynayabilirsiniz. Bu, size çıktıları başka bir uygulamada kullanıyorsanız paha biçilmez olan şeyleri ihtiyaç duyduğunuz şekilde biçimlendirmek için harika bir fırsat verir.

Daha fazla: http://linux.about.com/od/commands/l/blcmdl1_find.htm

Daha iyi okunabilmesi için hepsini columnkomutun içinden geçirebilirsiniz ve sıraya girmeleri için şeyleri otomatik olarak yeniden boyutlandırır.

find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n" | column -t

4

Oli cevap findverdiğinde, dizin ağacının tamamını aramanıza izin verir:

find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n"

# Where %TY will display the mod. time year as 4 digits
#       %Tm will display the mod. time month as 2 digits
#       %Td will display the mod. time day as 2 digits
#       %s displays the file size in bytes
#       %p displays the full path name of the file

Ayrıca -type fsonuçları sadece dosyalarla sınırlamak için seçeneği kullanmak isteyebilirsiniz . Bir dosya düzenini eşleştirmek istiyorsanız, -nameveya -inameseçeneklerini (sırasıyla büyük / küçük harf duyarlı ve büyük / küçük harf duyarlı eşleşme) istiyorsunuz . find'Nin man sayfasını okuyun - aramanızı daraltmak / daraltmak için kullanabileceğiniz çok sayıda seçenek vardır.

Ve bir yana, birden fazla ekran bilgisinin size geri gönderilmesini bekliyorsanız, sonuçlarınızı aktarmayı unutmayın less.

@Oli: +1 Ben de yeni bir şeyler öğrendim - column. Bunu daha önce kullanmamıştım.


3

lsUbuntu ve diğer Linux ve Unix işletim sistemlerinde dosyaları listelemek için standart komuttur. lsÖğrenmek için özellikle yararlıdır çünkü tanıştığınız her Unix sistemine kurulu olduğunu göreceksiniz. Varsayılan olarak bu çalıştırma, yalnızca geçerli dizindeki dosyaları görüntüler.

Ancak -R'bayrak' olduğu özyinelemeli seçeneği (sermaye not R , değil r sıra size tüm alt dizinleri gösterecektir).

Siz de "detaylar" istediniz - bunun için -lbayrağını istiyorsunuz (bu bir numaralı değil küçük bir L). Bunun size dosya izin bilgileri, dosya boyutu, saat / tarih bilgisi ve dosya adı verdiğini unutmayın.

Ayrıca gizli dosya / klasörleri ( Nautilus'taki Ctrl+ eşdeğeri) göstermek istiyorsanız 'all' bayrağını Hekleyin -a.

Bayrakları birleştirebilir, size şöyle bir şey verebiliriz:

ls -lR

Bunu düzgün bir boyutta bir klasörde çalıştırırsanız, ekranınızı çok hızlı aşağı kayan dev bir uzun çıktı üretir. Bunun üstesinden gelmek için , adı lsverilen bir programın çıktısını 'kısaltabilirsiniz' less(ad, benzerleri morearasında ilk olan ama daha fazla özelliğe sahip olanın bir parodisidir ).

ls -lR | less

Bu, çıktıyı daha rahat bir hızda ilerletmek için PageUp / Down ile birlikte yukarı / aşağı ok tuşlarını kullanmanıza izin verir.


0

Krusader'i kullanarak:

  1. Ara (Ctl-S) kullanın.
  2. "Alt dizinlerde ara" seçeneğini işaretleyin.
  3. "Ara" düğmesine tıklayın.
  4. Arama tamamlandığında, "Liste kutusuna besle" ye tıklayın.

Bu, tüm lotu diğer panele vb. Sürükleyerek işlemenizi sağlar.


0

Nautilus senaryosuna ne dersiniz ?

#!/bin/bash
#
# AUTHOR:       (c) 2013 Glutanimate (https://askubuntu.com/users/81372)
# NAME:         DirTree 0.1
# DEPENDENCIES: zenity tree  (install with sudo apt-get install zenity tree)
# LICENSE:      GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
#
# DESCRIPTION:  Creates a directory tree at the current location. If you want you
#               can filter the output by a pattern (e.g. *.avi to only include avi
#               files).

TITLE=DirTree

# Get working directory
WORKINGDIR="`python -c 'import gio,sys; print(gio.File(sys.argv[1]).get_path())' $NAUTILUS_SCRIPT_CURRENT_URI`"

# Time and date
TIME=$(date +"%Y-%m-%d_%H%M%S")

# Filter pattern
zenity --question --title "$TITLE" --text "Do you want to filter by a specific file pattern?"

if [ "$?" = "1" ]
  then
      customtree="tree"
  else
      PATTERN=$(zenity --entry --title "$TITLE" --text="Please enter a file pattern (e.g. *.avi)")

         if [ -z "$PATTERN" ]
           then
               exit
           else
               customtree="tree -P $PATTERN"               
         fi

fi

# Directory tree
$customtree "$WORKINGDIR" > "$WORKINGDIR/directorytree_$TIME.txt"

Yükleme talimatları: Bir Nautilus betiğini nasıl yükleyebilirim?


0

Bunun için özel bir program hazırladım - Directory Snapshot .
Bir dizini yinelemeli olarak yineler ve karşılaştığı tüm dosya ve klasörlerin adlarını ve boyutlarını giriş dizininkine benzer bir organizasyonu olan düzgün bir şekilde yapılandırılmış HTML dosyalarında saklar.
Başka bir deyişle, bu, komutların dir /sveya köprülü bir versiyon olarak düşünülebilir tree /f.


Siz DOS tarzı seçeneklerle yazdınız dirve treesormam gerekiyor, bu Ubuntu'da işe yarayacak mı?
wjandrea

Evet, aslında her hafta sonu Ubuntu kurulumumda çalışacak şekilde planladım. C ++ ve Boost kullanılarak oluşturulmuş olmasına rağmen, derlemek ve bir ikili dosya oluşturmak biraz zor olacaktır. Bu yüzden Python'a taşıma sürecinde bulunuyorum. Her neyse, istersen sana önceden derlenmiş bir ikili verebilirim.
Anmol Singh Jaggi,

0

Nautilus

  1. Liste görünümünde genişleyen alt klasörleri etkinleştir
    • 14.04 ve 16.04 için buraya bakın
    • 17.10 ve 18.04 için buraya bakınız
  2. Bir klasöre tıklayın ve bir alt düzey seviyesini genişletmek *için yıldız işaretine ( sayısal tuş takımında veya Shift+ 8) basın. Yıldız tuşuna her basışınızda bir sonraki seviyeye geçilir.

Bu aynı zamanda Nemo'da da çalışır.


-1

Bunları .bashrc dosyasına koyabilirsiniz.

function _get_tree(){ ls -alR | while read LINE; do   echo $LINE | grep ":$" > /dev/null;   if [ $? -eq 0 ];   then     VAR=$(echo $LINE | grep ":$"| sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/' | tee /dev/tty);   fi;   echo $LINE | grep "^-" > /dev/null;   if [ $? -eq 0 ];   then     size=${#VAR};     for i in $(eval echo "{1..$size}"); do echo -n ' '; done;     echo -n '..';     echo $LINE | cut -d ' ' -f9;   fi; done; };

alias get_tree='_get_tree'

Artık herhangi bir dizinde get_tree komutunu kullanabilirsiniz ve tüm hiyerarşiyi görüntüleyecektir.

Sözdizimi:

$ get_tree

Örnek çıktı:

   .

    ..test.sh

   |-2

      ..123.log

   |---3

   |-----4

   |-5

   |---6

Bu yardımcı olur umarım !!


Ne yaptığınızı açıklamadığınız sürece yardım
Ron

-1 Kötü kod formatlama, yeterli açıklama yok. Ve neden takma isim yapıyorsun?
wjandrea
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.