Перечислите все имена (не пути) файлов, характерных для всех каталогов.
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"
Можно отобразить список имен, отсортированных по количеству каталогов, в которых они появляются.
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
С Комбинацией можно сравнить два каталога и видеть, какие файлы присутствуют в одном, а не в другой и наоборот. Это может также показать различия между общими файлами.
Для 3 каталогов, одного из них ток, и два и 'b', можно объединить тест в цепочку как это:
ls a/$(ls b/$(ls *.php) 2>/dev/null) 2>/dev/null
если файлы имеют общий шаблон (как .php) и не содержат пробел в именах файлов.
Используя ls
в Сценариях всегда проблематично, и я обычно отговариваю использовать его, но если у Вас есть обзор обо всех файлах в каталоге, где поиск запускается, и это не содержит пробел, ни специальные символы как "*" или"?", "<" или "|", это должно быть сохранение для использования его.