My computer has one 500GB drive.

I want to move 400GB of data from /unencrypted to /encrypted.

Both directories are on the same partition, but /encrypted is handled by ecryptfs, so mv /uncrypted/* /encrypted would:

  1. Copy all files to destination
  2. Then remove them from source

...which I can't afford, because it requires 800GB.
If files were moved one-by-one, there would be no problem (the ecryptfs zone is dynamic).

Is there an mv option or another tool, that moves a directory file-by-file?
There is a huge number of files, so ARG_MAX might be a problem for script-based solutions.

1 Answer 1


If you have rsync (remove --dry-run to do it for real):

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

Otherwise, using bash4+ and GNU stat:


set -e

shopt -s nullglob globstar

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

echo rm -r /unencrypted

To run it for real, remove echo from each command.

  • I love the rsync idea! Apparently files are indeed removed as they are moved: superuser.com/questions/405761 May 16, 2013 at 7:09
  • @NicolasRaoul If I recall correctly, the removals are buffered, but it is close to one-to-one copy/remove.
    – Chris Down
    May 16, 2013 at 7:10
  • Chunks are fine for me, as long as each chunk weights less than 50GB. May 16, 2013 at 7:12
  • Wouldn't you need to remove --dry-run from the rsync command line, too?
    – user
    May 16, 2013 at 7:41
  • 1
    @meduz v is optional and just prints the filenames as they are transferred. aHAX is required to keep all possible file attributes -- a is archive, HAX is "keep hardlinks, ACLs, and extended attributes".
    – Chris Down
    May 23, 2013 at 4:19

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.