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

Nic*_*oul 20 scripting file-copy rename files

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

我想将数据从移动400GB/unencrypted/encrypted

两个目录都在同一分区上,但/encryptedecryptfs处理,因此mv /uncrypted/* /encrypted

  1. 将所有文件复制到目的地
  2. 然后从源中删除它们

...我买不起,因为它需要 800GB。
如果文件一个一个地移动,就不会有问题(ecryptfs 区域是动态的)。

是否有mv选项或其他工具可以逐个文件地移动目录?
有大量文件,因此 ARG_MAX 可能是基于脚本的解决方案的问题。

Chr*_*own 20

如果您有rsync(删除--dry-run以真正做到):

rsync --dry-run --remove-source-files -avHAX /unencrypted/ /encrypted
Run Code Online (Sandbox Code Playgroud)

否则,使用 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
Run Code Online (Sandbox Code Playgroud)

要真正运行它,请echo从每个命令中删除。