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


20

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

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

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

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

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

是否有一个mv选项或另一个工具可以逐目录移动目录?
文件数量很多,因此ARG_MAX对于基于脚本的解决方案可能是个问题。

Answers:


20

如果有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从每个命令中删除。


我喜欢rsync的主意!显然,文件在移动时确实已删除:superuser.com/questions/405761
Nicolas Raoul

@NicolasRaoul如果我没记错的话,删除内容会被缓冲,但是接近一对一的复制/删除。
克里斯·唐尼

只要每个块的重量小于50GB,块对我都很好。
Nicolas Raoul

您是否也不需要--dry-run从rsync命令行中删除?
CVn

1
@meduz v是可选的,仅在传输文件名时打印它们。aHAX必须保留所有可能的文件属性- a已存档,HAX是“保留硬链接,ACL和扩展属性”。
克里斯·唐尼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.