ファイルごとにディレクトリを移動する方法は?(「コピーして削除」の代わりに)


20

私のコンピューターには500GBのドライブが1つあります。

私はからのデータの400ギガバイトを移動したい/unencrypted/encrypted

両方のディレクトリが同じパーティションにあるが、/encryptedによって処理されるのeCryptfs、そうmv /uncrypted/* /encryptedでしょう:

  1. すべてのファイルを宛先にコピーします
  2. 次に、それらをソースから削除します

...それは800GBを必要とするので、私は余裕がない
ファイルを1つずつ移動した場合、問題はありません(ecryptfsゾーンは動的です)。

mvディレクトリをファイルごとに移動するオプションや別のツールはありますか?
膨大な数のファイルがあるため、ARG_MAXはスクリプトベースのソリューションでは問題になる可能性があります。

回答:


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正しく思い出せば、削除はバッファリングされますが、1対1のコピー/削除に近いです。
クリスダウン

各チャンクの重みが50GB未満であれば、チャンクは問題ありません。
ニコラスラウル

--dry-runrsyncコマンドラインからも削除する必要はありませんか?
CVn

1
@meduz vはオプションであり、ファイル名が転送されるときにファイル名を出力するだけです。aHAX可能なすべてのファイル属性を保持するために必要です- aアーカイブでHAXあり、「ハードリンク、ACL、および拡張属性を保持します」。
クリスダウン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.