найти набор общих файлов между несколькими каталогами?

9

Я смотрю, чтобы сравнить каталоги тем Drupal. Тема drupal - это каталог, состоящий из нескольких файлов, и я пытаюсь выяснить, какие из них необходимы. Например, у всех них может быть файл с именем template.phpили page.tpl.php.

Как я могу найти набор всех общих файлов для нескольких каталогов? В моем случае все «одинаковые» файлы (файлы с одинаковыми именами) будут находиться в одном и том же каталоге уровней.

user394
источник
Есть несколько ответов в разделе «Shell Puzzle» на ukuug.org/newsletter/10.4 (хотя они и являются shell-golf-ish).
Джеймс Янгман

Ответы:

7

Список всех имен (не путей) файлов, общих для всех каталогов.

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"

Или вызвать его как скрипт-файл или функцию с каталогами в качестве параметров.

find "$@" -maxdepth 1 -type f -name "*" -printf '%f\n' |
  sort | uniq -c | sed -n "s/^ *$# //p"
Peter.O
источник
1

Вы можете отобразить список имен, отсортированных по количеству каталогов, в которых они отображаются.

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 вы можете сравнить две директории и посмотреть, какие файлы присутствуют в одной, а не в другой, и наоборот. Он также может показать различия между общими файлами.

Бернхард
источник
0

Для 3 каталогов, один из которых текущий, а два «a» и «b», вы можете выполнить цепочку теста следующим образом:

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

если файлы имеют общий шаблон (например, .php) и не содержат пробелов в именах файлов.

Использование lsв сценариях всегда проблематично, и я обычно не рекомендую использовать его, но если у вас есть обзор всех файлов в каталоге, где начинается поиск, и он не содержит пробелов и специальных символов, таких как «*» или «? "," <"или" | ", его следует сохранить, чтобы использовать.

Пользователь неизвестен
источник