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

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

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

/unencrypted400GBのデータをからに移動したいと思います/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各コマンドから削除します。

おすすめ記事