如何逐个文件移动目录? (而不是“复制然后删除”)

如何逐个文件移动目录? (而不是“复制然后删除”)

我的电脑有一个 500GB 的驱动器。

我想将 400GB 数据从 移动/unencrypted/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从每个命令中删除。

相关内容