디렉토리를 파일 단위로 이동하는 방법은 무엇입니까? ( “복사 후 제거”대신) 있습니다. 400GB의 데이터를에서 /unencrypted로 이동하고 싶습니다

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

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

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

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

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

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



답변

당신이 가지고 있다면 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각 명령에서 제거하십시오 .


답변