web-dev-qa-db-ja.com

ETAを使用したLinuxファイルのコピー?

ディスク間で大量のファイルをコピーしています。約16GBのデータがあります。進捗情報、さらには完了予定時刻も表示したいコマンドラインから

何かアドバイス?

6
bobby

rsync --human-readable --progressを使用します。

単一ファイルおよびブロックデバイスの場合、pvもあります。また、正確なプログレスバーが本当に必要な場合は、pvでtarを使用してみてください—次のようになります。

source=/the/source/directory
target=/the/target/directory
size=$(du -sx "$source")
cd "$source"
find . xdev -depth -not -path ./lost+found -print0 \
    | tar --create --atime-preserve=system --null --files-from=- \
          --format=posix --no-recursion --sparse \
    | pv --size ${size}k \
    | { cd "$target"; \
        tar --extract --overwrite --preserve-permissions --sparse; }

ただし、GNU tarはまだACLまたは拡張属性をサポートしていないため、「acl」または「xattrs」オプションでマウントされたファイルシステムをコピーする場合は、 rsyncを使用する必要があります(「--acls」および「--xattrs」オプションを使用)。個人的には、次のものを使用します。

rsync --archive --inplace --hard-links --acls --xattrs --devices --specials \
    --one-file-system --8-bit-output --human-readable --progress /source /target

また、--deleteおよび/または--numeric-idsオプションを使用するかどうかも調べてください。

8
Teddy

ddの代わりに pv をお勧めします。例:

% tar -cf - INPUT | pv -rbe -s SIZE | tar -xf - -C DEST 
4
akira

_rsync -P_を試しましたか? ddを使用している場合、例: tar -cf - src | dd | (cd dest; tar -xf -) Ctrl-T(SIGINFO)を使用して進行状況を確認できるはずです。

2
Gerald Combs