Как переместить каталог, файл по файлу? (вместо «copy then remove»)

Мой компьютер имеет один диск емкостью 500 ГБ.

Я хочу переместить 400 ГБ данных из /unencrypted в /encrypted .

Оба каталога находятся в одном разделе, но /encrypted обрабатывается ecryptfs , поэтому mv /uncrypted/* /encrypted будет:

  1. Скопировать все файлы в пункт назначения
  2. Затем удалите их из источника

… которые я не могу себе позволить, потому что это требует 800 ГБ.
Если файлы перемещались один за другим, не было бы проблем (зона ecryptfs – динамическая).

Есть ли опция mv или другой инструмент, который перемещает файл по файлу?
Существует огромное количество файлов, поэтому ARG_MAX может быть проблемой для решений на основе скриптов.

Если у вас есть 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 из каждой команды.