Linuxのコマンドライン再帰/ディープディレクトリコピー?


13

ほとんどの場合、Linuxで再帰/深層ディレクトリコピーを作成するための適切な一般的な方法は何ですか?私はcp -R、かなり複雑なcpio呪文のような単純なものを使用しました。どちらか一方を好むようにする大きな長所または短所はありますか?最も頻繁に使用するのはどれですか?

回答:


29
NAME
cp - copy files and directories

-a, --archive
   same as -dpR

-d     same as --no-dereference --preserve=links
-p     same as --preserve=mode,ownership,timestamps
-R, -r, --recursive
    copy directories recursively

あなたの質問に答えて:

cp -a /foo /bar

シンボリックリンクとファイル/ディレクトリ 'mode' 'ownership'& 'timestamps'を保持しながら、ディレクトリ/ fooからディレクトリ/ barにすべてを再帰的にコピーします。


これは確かに非常に簡単でエレガントなソリューションです。このアプローチの欠点を発見したことはありますか?分散ファイルシステム?非常に大きなコピーですか?場合によっては、cpio、tar、rsyncなどの他のソリューションの方が効率的であることがわかりましたか?
グレッグマット

1
物理的なエラーがない限り、ローカルでマウントされた任意の場所(NFSまたはSambaのマウントに関係なく)へのメモリからローカルの「cp」エラーが発生したことはありません(TBサイズの転送のみを行いました)。参考になる例については、rsyncのmanページで「USAGE」を確認してください。私のお気に入り:$ rsync --partial --progress --rsh = ssh --archive --verbose --compress foo / user @ hosname:〜/ bar(rsync -avzP)
Gareth

上で述べたように、-aは厳密には移植できません。
マシューフラシェン09年

busybox、GNU&BSD cpは問題ないことを知っています。レガシーUnixボックス以外では、何が機能しないのか見たことがないのですか?ゾレダチェの「仕事はいつも正しくやり遂げられるように思えるので、代替品を見つけるのに一生懸命に努力したことはない」という感情を完全に理解しているものの、それ以外の点はあまり見当たらない。
ガレス

@gyaresu 2番目のコメントを別の回答に分割して、投票できるようにしてください。
グレッグマット

6

「cd $ srcdir; tar -c。| tar -C $ destdir -x」のようなコマンドを最もよく使用します。しかし、rsync -a $ src $ dstも使用します。

tarソリューションの最大の強みは、何年も前にcpio、rsync、または再帰的にコピーするcpがなかったシステムで使用する必要があったことです。タールはほとんどどこにでもあります。私はそれをたくさん使ったので頭に貼り付いています。おそらくもっとエレガントな方法があるでしょう。仕事はいつも正しく行われているように見えるので、私は本当に代わりを見つけるのが難しいとは思っていません。


私は「tarの遍在」の議論が大好きです。他の編集環境を好みますが、私は同様の理由でviに精通しています。
グレッグマット

-Rは-aではなく、長い間標準(opengroup.org/onlinepubs/009695399/utilities/cp.html)の一部でした。
マシューフラッシェン09年

@Matthew Flaschen:あなたのコメントは@gyaresuの答えを意図したものですか?
グレッグマット

Zoredacheが「再帰的にコピーするcpを持っていなかった」システムに遭遇したと言ったので、これも関連しています。基本的に、-R->ポータブル、-a->ポータブルではありません。
マシューフラッシェン09年

1
これは95年前に遡り、システムは80年代後半のUnixを実行していました。-Rはcpのオプションではなかったと思いますが、確信はありません。私はそのちらつきがusenetを読んでいることを学びました。
ゾレダチェ2009年

6

rsyncを見てください。2つのディレクトリを最新の状態に保つと、コピーするデータが少なくなるため、気に入っています。リモートで動作することもできます。最も単純な形式では、rsync -a / src / dest


これは本当に良い点です。基本的に、rsyncには「ディレクトリdiff」を計算し、ディレクトリの同期に必要なものだけを転送する機能があります。したがって、rsync -a src / destのようなものを繰り返し呼び出して、ディレクトリを再帰的に「継続的にコピー」することができます(適切な同期にはsrcの末尾/が必要です)。cpコマンドは、最初のcpの後にdestに新しいsrcディレクトリを作成します。後続のコピーには、cp -au src / * destのようなものが必要です。
グレッグ

私がrsyncを好むもう1つの理由は、プログレスバーを表示する-Pフラグを渡すことができることです。それはあなたが何かがどれくらいかかるかについてのいくらかのアイデアを与えます
ロリー

0

rsync素晴らしいツールです。データを転送するスイスアーミーナイフです。とてもシンプルで強力なツールです。使用を開始すると、夢中になります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.