çeşitli dizinler arasındaki ortak dosya kümesi?


9

Drupal temalarının dizinlerini karşılaştırmak istiyorum. Drupal teması birkaç dosyadan oluşan bir dizindir ve hangilerinin önemli olduğunu anlamaya çalışıyorum. Örneğin, hepsinde template.phpveya adlı bir dosya olabilir page.tpl.php.

Birkaç dizin için tüm yaygın dosya kümesini nasıl bulabilirim? Benim durumumda, tüm 'aynı' dosyalar (aynı ada sahip olanlar) aynı düzey dizinde olacak.


Ukuug.org/newsletter/10.4'ün 'Shell Puzzle' bölümünde (Shell-golf-ish olmasına rağmen) bazı cevaplar var .
James Youngman

Yanıtlar:


7

Tüm dizinlerde ortak olan dosyaların tüm adlarını (yollarını değil) listeleyin.

dirs=( "A dir" "B dir" "C dir" "D dir" )
find "${dirs[@]}" -maxdepth 1 -type f -name "*" -printf '%f\n' |
  sort | uniq -c | sed -n "s/^ *${#dirs[@]} //p"

Veya dizinler parametre olarak bir komut dosyası veya işlevi olarak adlandırın.

find "$@" -maxdepth 1 -type f -name "*" -printf '%f\n' |
  sort | uniq -c | sed -n "s/^ *$# //p"

1

Göründükleri dizin sayısına göre sıralanmış bir ad listesi görüntüleyebilirsiniz.

find */ |              # traverse all the template directories
sort -t / -k 2 |       # sort, ignoring the first field
tr '/' '\t' |          # turn / into tabs
uniq -f 1 -c |         # count duplicates, ignoring the first field
tr '\t' '/' |          # turn tabs back into /
sort -t / -s -k 1n     # sort by the number of occurrences

0

Meld ile iki dizini karşılaştırabilir ve diğerinde değil, birinde mevcut olan dosyaları görebilirsiniz. Ayrıca ortak dosyalar arasındaki farkları da gösterebilir.


0

Biri güncel ve iki 'a' ve 'b' olmak üzere 3 dizin için testi şu şekilde zincirleyebilirsiniz:

ls a/$(ls b/$(ls *.php) 2>/dev/null) 2>/dev/null

dosyalar ortak bir desene (.php gibi) sahipse ve dosya adlarında boşluk içermiyorsa.

lsKomut Dosyalarında kullanmak her zaman sorunludur ve normalde kullanmaktan vazgeçerim, ancak aramanın başladığı dizindeki tüm dosyalar hakkında bir genel bakışınız varsa ve boşluk veya "*" veya "gibi özel karakterler içermiyorsa? "," <"veya" | ", kullanmak için kaydedilmelidir.

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.