tìm tập hợp các tập tin phổ biến giữa một số thư mục?


9

Tôi đang tìm cách so sánh các thư mục của các chủ đề Drupal. Chủ đề drupal là một thư mục bao gồm một số tệp và tôi đang cố gắng tìm ra những tệp nào là thiết yếu. Ví dụ, tất cả họ có thể có một tệp được gọi là template.phphoặc page.tpl.php.

Làm thế nào tôi có thể tìm thấy tập hợp tất cả các tập tin phổ biến cho một số thư mục? Trong trường hợp của tôi, tất cả các tệp 'giống nhau' (những tệp có cùng tên) sẽ nằm trong cùng thư mục cấp.


Có một số câu trả lời trong phần 'Shell Puzzle' của ukuug.org/newsletter/10.4 (mặc dù chúng là shell-golf-ish).
James Youngman

Câu trả lời:


7

Liệt kê tất cả các tên (không phải đường dẫn) của các tệp chung cho tất cả các thư mục.

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"

Hoặc gọi nó dưới dạng tập lệnh hoặc hàm, với các thư mục là tham số.

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

1

Bạn có thể hiển thị danh sách các tên được sắp xếp theo số lượng thư mục chúng xuất hiện.

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

Với Meld, bạn có thể so sánh hai thư mục và xem tệp nào có trong một, không phải trong thư mục kia và ngược lại. Nó cũng có thể hiển thị sự khác biệt giữa các tập tin phổ biến.


0

Đối với 3 thư mục, một trong số chúng là hiện tại và hai 'a' và 'b', bạn có thể xâu chuỗi bài kiểm tra như thế này:

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

nếu các tệp có một mẫu chung (như .php) và không chứa khoảng trắng trong tên tệp.

Việc sử dụng lstrong ScScript luôn có vấn đề và tôi thường không khuyến khích sử dụng nó, nhưng nếu bạn có cái nhìn tổng quan về tất cả các tệp trong thư mục nơi tìm kiếm bắt đầu và nó không chứa khoảng trắng, cũng không phải các ký tự đặc biệt như "*" hoặc "? "," <"hoặc" | ", nên lưu lại để sử dụng nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.