Dosya adlarını iki klasörde nasıl ayırt edersiniz (ara dosyalara yazmadan)?


31

Satırları boyunca bir şeyler yapmaya çalışıyorum:

diff `ls -1a ./dir1` `ls -1a ./dir2`

Ancak bu bariz sebeplerden dolayı işe yaramıyor. Bunu başarmanın daha iyi bir yolu var mı (1 satırda), bundan daha mı?

ls -1a ./dir1 > lsdir1
ls -1a ./dir2 > lsdir2
diff lsdir1 lsdir2

Teşekkürler

Yanıtlar:



10
diff -rq dir1 dir2

-r seçeneğini kullanarak, dizin ağaçlarının tamamında yürüyün, alt dizinler ve her bir ağaçta karşılaştırılabilir noktalarda oluşan dosyalar arasındaki farkları tekrar tekrar kontrol edin. İşin püf noktası, satır satır karşılaştırmaları gizlemek için -q seçeneğini kullanmak


3
@festo: Bu soruya değinmediğiniz konusunda endişeleniyorsunuz, aslında dosyaların içeriğini ls
dağıtmak

+1, Aslında, bir uyarı ile aynı çıktıyı aldım, diff -rq 'böyle bir dosya veya dizin yok' olarak bağlı bir dosya bildirdi. Öyleyse, artı doğru ve açıkçası basit kullanım için bir tane. (
IVA'nın cevabı

1
Bu, dosya adlarını ayırmaktan çok daha yavaştır: her dosyanın tamamının okunması ve karşılaştırılması gerekir.
Zaz

Elbette @Josh, çünkü özyinelemeli yapar ....
Braiam

1
@Braiam: Dosya adlarını yinelemeli olarak dağıtsanız bile ( örneğin rsyncbu --dry-runseçeneği kullanarak ), yine de çok daha hızlı olacaktır diff -r.
Zaz
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.