varsayılan komut sıralama düzenini bulun


30

linux find komutu tarafından döndürülen girişler için varsayılan sıralama düzeni nedir?

Mesela eğer çıkarsam

find . -type f -name '*mp3' 

ve çıktı, birden fazla alt klasördeki birden fazla dosyadan oluşuyor, dizinlerin listelendiği varsayılan sıra nedir? Aynı zamanda, tek bir dizindeki dosyaların listelendiği sıralama düzeni nedir?

Bazen döner:

./B/01.mp3
./A/01.mp3
./A/04.mp3
./A/02.mp3

Önce B dizininin içeriğinin, sonra A dizininin içeriğinin listelenmesine bakın. A dizini içinde aynı zamanda, dosyalar komik bir sırada listelenir.


Deneyimden, kurulum başına tutarlı görünüyor, yani. İki makinede aynı dosya kümesine sahipseniz, her zaman bir makinede bir sipariş ve diğerinde tamamen farklı bir dosya döndürür. Neden daha önce merak ettim, +1
James L

1
Arabamda bir FM vericim var ve her zaman flash kartımdaki şarkıları garip sırayla çalıyor. Asla anlamadım, ama yukarıdaki komutun çıktısını döndürdüğü ile aynı sırada olduğunu fark ettim
Nasko

BTW: BSD find, -sçıktıyı alfabetik olarak sıralamak için parametreye sahiptir .
lapo,

Yanıtlar:


19

findDizin ağacını, sıralı öğeler dizin girişleri içinde saklanacak şekilde geçecek. Bu (çoğunlukla), aynı makinede çalıştırmadan çalıştırmaya tutarlı olacak ve esasen "silme işlemi yapılmamışsa" dosya / dizin oluşturma sırası "olacak.

Ancak, bazı dosya sistemleri, dizin girişlerini sıkıştırma işlemlerinin bir parçası olarak veya girişin boyutunun genişletilmesi gerektiğinde yeniden sıralayacaktır; bu nedenle, "ham" siparişin zaman içinde değişmesi her zaman küçük bir ihtimaldir. Tutarlı bir düzen istiyorsanız, çıktıyı fazladan bir sıralama aşamasından geçirin.


Detaylı cevabınız için teşekkürler! Bu yüzden, eğer FM vericim (önceki yorumuma bakın) parçaları find komutunun listeleyeceği sırada çalarsa, hangi sırada çalmalarını istediğimi kontrol edemiyorum.
Nasko

Eh, flash kart muhtemelen bir FAT dosya sistemi kullanıyor ve doğru hatırlıyorsam, FAT girişlerinin sırasını değiştirmek bir dosya sistemi hata ayıklayıcı ile oldukça kolaydır. Muhtemelen, şarkıları geçerli flaştan yeni bir flaşa kopyalamak isteyebilir, çalınmasını istediğiniz sırada daha kolay olabilir.
Vatine

Bu tutarlılığın kullanışlı uygulamalarından biri, önce dosyaların sıralanmasını sağlamak için find /path/ -exec ...çok daha hızlı çalışmanın yavaş ilerlemesinin tahminidir find /path/.
Andrey,


2

Sırasıyla 1984 / 1999'dan beri UNIX / Linux'ta çalışıyorum ve bana öğretilen ilk komut bulundu. Linux / GNU, ihtiyacınız olan her şeyi mevcut find komutuna koyar, bu yüzden onunla oynayın.

İşte bul çıktısını sıralamak için bazı yararlı ipuçları. -Printf seçeneği, daha karmaşık sıralama ve dosya bilgileri sunumu sağlamak için size birçok seçenek sunar. Bu gibi sorunlar için en iyisidir. Sizin için neyin işe yarayacağını görmek için onunla oynayın. -Printf komutunu kullanarak sonuçları istediğiniz şekilde özelleştirebilir ve sınırlayabilirsiniz. İşlemi göndermeniz gerektiğinde bu biraz yardımcı olur. Umarım bu birine yardımcı olur.

  1. -Ls kullanıyorsanız ve dosya adına göre sıralamak istiyorsanız, 11. alan dosya adıdır, böylece aşağıdakileri yapabilirsiniz. Sort -k seçeneği, sıralamak için birden fazla alan alabilir.

    find / path -ls | sıralama -k11

  2. Daha iyi tahıl kontrolünün artan veya azalan düzende tarih / saate göre bırakılmasını istiyorsanız, -printf "" seçeneğini kullanın. Daha fazla ayrıntı için el kitabına bakın, ancak aşağıdaki, kesirli saniye ile yazdırılacak bir örnek, bu yüzden çok doğru.

ÖRNEK TARİH / SAAT: 2016-09-17 + 12: 09: 57.9013929800

find /path -printf "%T+ %p\n" | sort -n # Ascending

find /path -printf "%T+ %p\n" | sort -nr # Descending

Tarih / saat dizesinde karakter olmadan bunu yapmanın başka bir yolu.

ÖRNEK TARİH / SAAT: 20160917120013.8101685040

find /path -printf "%AY%Am%Ad%AH%AM%AS %p\n" | sort -n
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.