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

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

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

/unencrypted400GB 데이터를 에서 으로 이동하고 싶습니다 /encrypted.

두 디렉터리는 모두 동일한 파티션에 있지만 /encrypted다음과 같이 표시됩니다 .암호화된 파일 시스템,그러므로 mv /uncrypted/* /encrypted:

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

...800GB가 필요하기 때문에 감당할 수 없습니다.
파일을 차례로 이동하면 문제가 없습니다(ecryptfs 영역은 동적임).

mv파일별로 디렉터리 파일을 이동하는 옵션이나 다른 도구가 있습니까 ?
파일 수가 많기 때문에 스크립트 기반 솔루션에서는 ARG_MAX가 문제가 될 수 있습니다.

답변1

다음이 있는 경우 rsync( --dry-run실제로 이 작업을 수행하려면 제거하세요):

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

그렇지 않으면 bash4+ 및 GNU stat을 사용하십시오.

#!/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각 명령에서 제거하십시오.

관련 정보