Получение различий между двумя каталогами с полной информацией

После смены картинки вам необходимо обновить файл grub.cfg. Для этого откройте терминал и введите эту команду

# update-grub
1
03.04.2020, 09:58
2 ответа

Это просто, попробуйте популярный инструментdiff:diff -r dir1 dir2Редактировать :Я неправильно понял вопрос ОП, чтобы получить только информацию , что файлы различаются, а не , как они различаются, вам нужно использовать опцию -q:diff -r -q dir1 dir2

1
28.04.2021, 23:18

Эмуляция того, как такие инструменты, как commили join, будут сравнивать два набора отсортированных входных данных, используяbash:

# Get lists of (base-)names from both directories.
files1=( dir1/* ); files1=( "${files1[@]##*/}" )
files2=( dir2/* ); files2=( "${files2[@]##*/}" )

# Loop over these sorted lists until one of them is empty.
while [[ ${#files1[@]} -gt 0 ]] && [[ ${#files2[@]} -gt 0 ]]; do
        name1=${files1[0]}
        name2=${files2[0]}

        if [[ $name1 == "$name2" ]]; then
                # Name exists in both directories.
                printf '%s is modified or same\n' "$name1"
                files1=( "${files1[@]:1}" )
                files2=( "${files2[@]:1}" )
        elif [[ $name1 < $name2 ]]; then
                # Name exists in only first directory.
                printf '%s is removed\n' "$name1"
                files1=( "${files1[@]:1}" )
        else
                # Name exists in only second directory.
                printf '%s is added\n' "$name2"
                files2=( "${files2[@]:1}" )
        fi
done

# Handle remaining names.
if [[ ${#files1[@]} -gt 0 ]]; then
        printf '%s is removed\n' "${files1[@]}"
fi
if [[ ${#files2[@]} -gt 0 ]]; then
        printf '%s is added\n' "${files2[@]}"
fi

Я использую два bashмассива для хранения имен, найденных в каждом каталоге, а затем выполняю итерацию, пока один из этих массивов не станет пустым.

В цикле я сравниваю имена каждого массива друг с другом. Если имена совпадают, то файл такой же или, возможно, был изменен (, затем имя удаляется из обоих массивов ).

Если имя из первого массива сортируется перед именем из второго массива (, проверенного с помощью <), то первое имя отсутствует во втором каталоге. Теперь удалите первый элемент первого массива.

В противном случае имя из второго массива отсутствует в первом каталоге. Теперь удалите первый элемент второго массива.

После цикла один из массивов может быть не -пустым, поэтому при необходимости выведите имена из этого массива.

0
28.04.2021, 23:18

Теги

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