Вы можете получить то, что хотите, используя эту команду:
KEY=$(awk -F 'key *= *' '{print $2}' f.conf)
for name in dir1/* dir2/*; do
bname=${name##*/}
if [ ! -e "dir1/$bname" ]; then
printf '"%s" not in dir1\n' "$bname"
elif [ ! -e "dir2/$bname" ]; then
printf '"%s" not in dir2\n' "$bname"
fi
done
Это будет перебирать все имена в dir1
и dir2
. $bname
будет базовым именем имени($name
без пути ).
Если (базовое имя )не может быть найдено в dir1
, об этом сообщается. В противном случае, если он не найден в dir2
, об этом сообщается.
Это работает с именами файлов, содержащими встроенные символы новой строки, и должно работать с /bin/sh
или любой другой совместимой sh
оболочкой.
Это потенциально может быть расширено до более чем двух каталогов. Сbash
:
dirs=( dir1 dir2 dir3 dir4 )
for dir in "${dirs[@]}"; do
for name in "$dir"/*; do
bname=${name##*/}
for tdir in "${dirs[@]}"; do
if [ ! -e "$tdir/$bname" ]; then
printf '"%s" not found in %s\n' "$bname" "$tdir"
fi
done
done
done
$ tree
.
|-- dir1
| `-- filename 1
|-- dir2
| |-- filename 1
| |-- filename 3
| `-- hello
world
`-- script.sh
$ sh script.sh
"filename 3" not in dir1
"hello
world" not in dir1