Как выполнить сравнение коротких имен файлов?

Вы можете получить то, что хотите, используя эту команду:

KEY=$(awk -F 'key *= *' '{print $2}' f.conf)
2
19.09.2017, 21:34
1 ответ
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
1
27.01.2020, 22:18

Теги

Похожие вопросы