menemukan kumpulan file umum di antara beberapa direktori?

9

Saya mencari untuk membandingkan direktori tema Drupal. Tema drupal adalah direktori yang terdiri dari beberapa file, dan saya mencoba mencari tahu mana yang penting. Misalnya, mereka semua mungkin memiliki file yang dipanggil template.phpatau page.tpl.php.

Bagaimana saya dapat menemukan kumpulan semua file umum untuk beberapa direktori? Dalam kasus saya, semua file 'sama' (file dengan nama yang sama) akan berada di direktori level yang sama.

pengguna394
sumber
Ada beberapa jawaban di bagian 'Puzzle Teka-Teki' di ukuug.org/newsletter/10.4 (meskipun itu shell-golf-ish).
James Youngman

Jawaban:

7

Daftar semua nama (bukan path) file yang umum untuk semua direktori.

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"

Atau menyebutnya sebagai file skrip atau fungsi, dengan direktori sebagai parameter.

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

Anda dapat menampilkan daftar nama yang diurutkan berdasarkan jumlah direktori tempat mereka muncul.

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
Gilles 'SANGAT berhenti menjadi jahat'
sumber
0

Dengan Meld Anda dapat membandingkan dua direktori, dan melihat file mana yang ada di satu, dan tidak di yang lain dan sebaliknya. Itu juga dapat menunjukkan perbedaan antara file umum.

Bernhard
sumber
0

Untuk 3 direktori, salah satunya direktori saat ini, dan dua 'a' dan 'b', Anda dapat membuat tes seperti ini:

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

jika file memiliki pola umum (seperti .php) dan tidak mengandung spasi putih dalam nama file.

Menggunakan lsdalam Skrip selalu bermasalah dan saya biasanya mencegah menggunakannya, tetapi jika Anda memiliki gambaran umum tentang semua file di direktori tempat pencarian dimulai, dan itu tidak mengandung spasi, atau karakter khusus seperti "*" atau "? "," <"atau" | ", harus disimpan untuk menggunakannya.

Pengguna tidak diketahui
sumber