내 컴퓨터에는 하나의 500GB 드라이브가 있습니다.
400GB의 데이터를에서 /unencrypted
로 이동하고 싶습니다 /encrypted
.
두 디렉토리 모두 동일한 파티션에 있지만 ecryptfs 에 /encrypted
의해 처리 되므로 다음과 같습니다.mv /uncrypted/* /encrypted
- 모든 파일을 대상으로 복사
- 그런 다음 소스에서 제거하십시오.
… 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
각 명령에서 제거하십시오 .