백업에서 전체 파일이 아닌 파일 속성 만 복원하기


2

Linux 컴퓨터의 기존 저장소에서 새로운 (Linux 기반의) NAS로 데이터를 복사하는 동안 실수로 새 위치로 속성 (가장 중요한 날짜 수정)을 가져 오지 못했습니다. 나는 또한 새로운 위치에서 파일을 계속 사용 / 수정 했으므로 다시 복사 할 수 없다.

내가 뭘하고 싶은지는 이전 스토리지와 새 스토리지의 차이점이며, 동일하다면 Linux 스토리지에서 NAS 스토리지 파일로 속성을 복원하십시오.

이 작업을 수행 할 스크립트 또는 도구와 같은 영리한 방법이 있습니까? 나는 리눅스 박스에서 또는 최악의 경우 원격 Windows 컴퓨터에서 실행할 수있다.

제안에 감사드립니다. / 존


당신이 할 수 있는 파일에 암호 해시를 실행 (SHA1 아마도), 각 파일의 해시의 양을 비교하여 동일한 경우 touch -m(해당 날짜 시간 설정) NAS 파일. 해킹이 될 수는 있지만 작동한다고 생각합니다.
Elliott Frisch

안녕 엘리엇, 제안 해줘서 고마워. 예, 아마도 이런 솔루션을 만들기 위해 몇 시간을 소비해야 할 것입니다. 나는 게으르며 이미 존재하는 도구를이 방법으로 사용할 수 있기를 바랬지 만 두 번째 옵션으로 생각하면 좋다.
Jon

답변:


0

나는 내가 생각해 낸 코드를 더 잘 공유 할 것이라고 생각했다. bash 프로그래머가 아니지만 Google을 통해 많은 지식을 얻을 수 있으므로이 코드는 저에게 도움이 될 것입니다. 기본적으로 다음과 같습니다.

  • 새 위치의 모든 파일과 폴더를 반복하고 각각에 대해 반복합니다.
    • 이전 위치에 동일한 파일이 있는지 확인하십시오.
      • 아니요 인 경우 로그 항목을 작성하십시오.
      • 그렇다면 타임 스탬프 (수정 날짜)가 일치합니까?
        • 예 - 할 일이 없지만 로그 항목 작성
        • 아니요, 타임 스탬프가 일치하지 않습니다.
          • 파일이 디렉토리입니까 아니면 파일 내용입니까? 그런 다음 타임 스탬프를 이전 위치에있는 파일의 타임 스탬프로 재설정하고 로그 항목을 작성하십시오
          • 파일 내용이 다른 경우 시간 소인도 가능합니다. 로그 항목을 작성하십시오.

암호:

shopt -s globstar

NEWDIR="/home/jon"
OLDDIR="/tmp/jon_old"
LOGFILE=restoreDates_$(date "+%Y-%m-%d-%H%M%S").log

echo $LOGFILE > $LOGFILE

for f in "$NEWDIR"/** ; do
OLDFILE=$(sed -e "s/$NEWDIR/$OLDDIR/" <<< $f)

  # Does corresponding file exist in old directory?

  if [ -a "$OLDFILE" ] ; then

    # Do both files have the same modify date?
    if [ $(stat -c %Y "$f") -eq $(stat -c %Y "$OLDFILE") ] ; then
        echo "$OLDFILE already has same modify date/time as $f" >> $LOGFILE
    else

        # Is this a directory?
        if [ -d "$f" ]; then
            echo "$f is a directory, modify timestamp will be reset to that of $OLDFILE; $(stat -c %y "$OLDFILE")" >> $LOGFILE
            touch -r "$OLDFILE" "$f"
        else
            # Not a directory - Is old file equal to the new?
            if $(cmp --silent "$f" "$OLDFILE"); then
                # yes
                echo "$OLDFILE and $f are identic, modify timestamp will be reset to $(stat -c %y "$OLDFILE")" >> $LOGFILE
                touch -r "$OLDFILE" "$f"
            else # File has changed
                echo "$OLDFILE differs from $f , which must have changed" >> $LOGFILE
            fi
        fi
    fi
  else # File does not exist in old directory
    echo "$OLDFILE does not exist (but $f do)" >> $LOGFILE
  fi

done;

코드에 대한 모든 의견은 환영합니다.


코드의 위의 프레 젠 테이션에 대한 사과 - 나는 코드 상자에 모든 것을 가져올 수 없었다 ...
Jon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.