디렉토리를 파일 단위로 이동하는 방법은 무엇입니까? ( "복사 후 제거"대신)


20

내 컴퓨터에는 하나의 500GB 드라이브가 있습니다.

400GB의 데이터를에서 /unencrypted로 이동하고 싶습니다 /encrypted.

두 디렉토리 모두 동일한 파티션에 있지만 ecryptfs/encrypted의해 처리 되므로 다음과 같습니다.mv /uncrypted/* /encrypted

  1. 모든 파일을 대상으로 복사
  2. 그런 다음 소스에서 제거하십시오.

... 800GB가 필요하기 때문에 여유가 없습니다.
파일이 하나씩 이동 된 경우 문제가 없습니다 (ecryptfs 영역은 동적 임).

mv디렉토리를 파일 단위로 이동 시키는 옵션 또는 다른 도구가 있습니까?
많은 파일이 있으므로 ARG_MAX는 스크립트 기반 솔루션에 문제가 될 수 있습니다.

답변:


20

당신이 가지고 있다면 rsync( --dry-run실제로 제거하십시오 ) :

rsync --dry-run --remove-source-files -avHAX /unencrypted/ /encrypted

그렇지 않으면 bash4 + 및 GNU 통계를 사용하십시오.

#!/bin/bash

set -e

shopt -s nullglob globstar

for from in /unencrypted/**/*; do
    to="${from/\/un//}"
    if [[ -d "$from" ]]; then
        echo mkdir -p "$to"
        echo chmod "$(stat -c %a "$from")" "$to"
        echo chown "$(stat -c %u:%g "$from")" "$to"
    else
        echo cp -a "$from" "$to" && echo rm "$from"
    fi
done

echo rm -r /unencrypted

실제로 실행하려면 echo각 명령에서 제거하십시오 .


나는 rsync 아이디어를 좋아한다! 그들이 이동으로 분명히 파일은 실제로 제거됩니다 superuser.com/questions/405761
니콜라스 라울

@NicolasRaoul 올바르게 리콜하면 제거가 버퍼링되지만 일대일 복사 / 제거에 가깝습니다.
Chris Down

각 청크의 무게가 50GB 미만이면 청크가 좋습니다.
니콜라스 라울

--dry-runrsync 명령 줄에서도 제거하지 않아도 됩니까?
CVn

1
@meduz v는 선택 사항이며 파일 이름이 전송 될 때 파일 이름 만 인쇄합니다. aHAX가능한 모든 파일 속성을 유지해야합니다. a아카이브 HAX는 "하드 링크, ACL 및 확장 된 속성 유지"입니다.
Chris Down
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.