Подтвердить что ты не робот

Скопировать права доступа к файлам, но не файлы

У меня есть две копии одного и того же дерева каталогов. У них почти одинаковые файлы в обоих (одна версия может содержать пару лишних или отсутствующих файлов). Однако большинство файлов являются общими для обоих каталогов (имеют одинаковые относительные пути и все).

Предположим, что они находятся в каталогах:

version1/
version2/

Проблема заключается в том, что разрешения в версии1/перепутались, и я хотел бы скопировать их из разрешений version2/, но делать это без замены файлов в версии 1/, которые являются более новыми.

Есть ли автоматический способ сделать это через bash? (Это не должно быть bash, это может быть и другой язык метода/программирования).

4b9b3361

Ответ 1

Вы должны посмотреть опцию --reference для chmod:

chmod --reference version2/somefile version1/somefile

Примените find и xargs соответствующим образом, и вы должны быть в порядке, то есть что-то вроде

 ~/version2$ find . -type f | xargs -I {} chmod --reference {} ../version1/{}

Это даже работает рекурсивно и устойчиво к отсутствующим файлам в целевом каталоге (bar No No file... errors, которые можно игнорировать). Конечно, он ничего не сделает с файлами, которые существуют только в целевом каталоге.

Приветствия,

Ответ 2

Вы можете использовать этот script (он изменяет разрешения рекурсивно, но индивидуально для каждого файла/каталога)

#!/bin/sh
chmod --reference $1 $2
if [ -d $1 ]
then
    if [ "x`ls $1`" != "x" ]
    then
        for f in `ls $1`
        do
            $0 $1/$f $2/$f
        done
    fi
fi

Запустите script с аргументами version2 version1

Ответ 3

chmod owner-group-other./dir или. /file возможно?

Если разрешения не являются мелкозернистыми и отличаются от одного файла к другому, вы можете сделать рекурсивный chmod в каталоге и унифицировать разрешения.

См. man chmod для ссылок на параметры, которые могут быть полезны