我的电脑有一个 500GB 的驱动器。
我想将 400GB 数据从 移动/unencrypted
到/encrypted
。
两个目录位于同一分区,但/encrypted
由加密文件系统,因此mv /uncrypted/* /encrypted
:
- 将所有文件复制到目的地
- 然后从源中删除它们
...我买不起,因为它需要 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
从每个命令中删除。