2015-12-17 17 views
7

Kopiuję pliki ze źródła do lokalizacji. Źródło nie jest własnością mnie, a zgoda na pliki u źródła to ---- rwx ---. Zezwolenie na pliki skopiowane do katalogu docelowego, który jest własnością mnie, to ---- r-x ---. Zezwolenie na katalog docelowy to drwxrwsrwx. Jak mam pliki z tą samą zgodą katalogu docelowego. Próbowałem "cp --no-preserve = all", ale to nie działało (wciąż takie same uprawnienia).Kopiowanie plików i nadawanie im uprawnień do katalogu docelowego

Odpowiedz

11

Spróbuj tego:

cp --no-preserve=mode,ownership $backupfile $destination 
1

Pozwól mi Parafrazując do „Jak zachować uprawnienia katalogu docelowego na kopię?”
Nie mogę wziąć kredytu za odpowiedź, ponieważ połączyłem kilka odpowiedzi, które znalazłem na wolności. Więc nadchodzi.

Firstly

Uprawnienia nie są powszechnie propagowane przez katalog, że pliki są kopiowane do raczej nowe uprawnienia są kontrolowane przez umask użytkownika. Jednak podczas kopiowania pliku z jednej lokalizacji do innej jest to pewien szczególny przypadek, w którym umask użytkownika jest w zasadzie ignorowany, a istniejące uprawnienia do pliku są zachowywane.

co wyjaśnia, dlaczego nie można bezpośrednio propagować uprawnienia do src do dst katalogu.

Istnieje jednak dwuetapowy sposób obejścia tego problemu.

  1. cp-metadata: Kopiuj atrybuty i tylko atrybuty chcesz zachować z powrotem do katalogu źródłowego. Oto krótki skrypt, który może to zrobić:
#!/bin/bash 
# Filename: cp-metadata 

myecho=echo 
src_path="$1" 
dst_path="$2" 

find "$src_path" | 
    while read src_file; do 
    dst_file="$dst_path${src_file#$src_path}" 
    $myecho chmod --reference="$src_file" "$dst_file" 
    $myecho chown --reference="$src_file" "$dst_file" 
    $myecho touch --reference="$src_file" "$dst_file" 
    done 

można opuścić komendę touch jeśli nie chcesz zachować znacznik czasu. Wymień myecho=echo na myecho=, aby wykonać polecenia.
pamiętać, że ten skrypt powinien być uruchamiany w trybie sudo aby móc uruchomić chown i chmod skutecznie

  1. cp --preserve: Po pomyślnym uruchomieniu pierwszego polecenia teraz czas skopiować zawartość wraz z atrybutami do katalogu dst .

    --preserve [= ATTR_LIST]
    zachować określone atrybuty (domyślnie: tryb, własności, znaczniki czasu), czy ewentualnych dodatkowych atrybutów: kontekst, linki, xattr, wszystko

    \cp -rfp $src_dir $dst_dir powinien zrobić czego chcesz.