Если я правильно понимаю, что вы хотите сделать, это решение:
#!/bin/sh
USAGE="Usage: $0 dir file1 file2 ... fileN\nto find all subdirectories of dir that contain all the given files.\n"
if [ "$#" == "0" ]; then
printf "$USAGE"
exit 1
fi
ARG=""
DIR=$1
shift
while (( "$#" )); do
ARG="$ARG -exec test -e \"{}/$1\" \; "
shift
done
cmd="find $DIR -type d $ARG -print"
eval $cmd
Что это такое:
Использование find ... -type d для поиска всех подкаталогов (включая каталог, заданный как первый параметр). Команда test -e проверяет, существует ли файл. Поэтому для данного каталога мы должны проверить все файлы, указанные в командной строке: test -e / path / to / directory / file1 test -e / path / to / directory / file2 test -e / path / to / directory / file3 ... /path/to/directory - {} - единственный результат поиска. Затем параметр find -exec можно использовать для проверки одного файла. Для проверки всех файлов требуется несколько параметров -exec test. Итак, в то время как цикл строит список параметров, то этот список объединяется в одну команду и оценивается.
Удачи ...
В этот момент x-swat довольно устарел, поэтому я считаю, что лучше использовать xorg-edgers. По крайней мере, у них есть дерзкая версия