移動するよりも、常にコピーして削除する方が良いでしょうか?


18

一般的に言えば、ファイルの移動をキャンセルすると、ターゲットまたはソースが不完全になる可能性があることに気付いたときにパニックに陥ります。この質問は、WindowsおよびUnixベースのプラットフォームに適用されます。どちらの場合でも、移動コマンドがどのように機能するかを正確に覚えることはできません。たとえば、ディレクトリを移動する場合。ディレクトリ全体をコピーしてから削除した後、各ファイルを個別にコピーして削除しますか?

のようなものを入力した後mv verybigdir dest、おそらく入力する必要があることを常に認識しますcp -R verybigdir dest  &&  rm -R verybigdir&&最初のコマンドが成功した場合にのみオペレーターが次のコマンドに進む)-またはこれは無意味ですか?移動の途中でCtrl+ を押すと、正確に何が起こりCますか?同様に、キャンセルボタンを押すと、Windows上で正確に何が起こりますか?

何かを移動した回数(前回はを使用したときsvn)をカウントできず、コンテンツが分割された2つのディレクトリがありました。すべてのアプリケーションが同じ方法でファイルのグループを移動するわけではないため、答えは難しいと思います。


16
何をするにしても、最初に削除しないでください。
mtone

@monotone Hilarious +1
ニックボルトン

回答:


10

Windowsでは、同じドライブとパーティションに移動すると、Unixのmvコマンドと同じように動作し、フォルダーの名前を変更するか、その親を変更します。ただし、別のドライバーまたはパーティションにファイルを移動すると、ファイルごとにコピーおよび削除されるため、圧縮せずにtarファイルまたはzipファイルを使用してパーティションやハードドライブ間でファイルをより速く移動する方が効率的です。 。あなたがそれをキャンセルした場合、それはそれがどこにあるかを単に停止します。Unixについても同じことが言えると思いますが、100%確信できるほど十分に実験しませんでした。iノードを変更するだけの問題ですが、別のパーティションまたはドライブ上にある場合は、そのパーティションまたはドライブ上のセクターにコピーする必要があります。転送中にキャンセルした場合、すでにいくつかのファイルが移動されていて、転送されたファイルにはそれが表示されます。

更新:移動をキャンセルして再開したい場合は、移動する注文を再発行してください。宛先フォルダーが既に存在することを警告する場合がありますが、ファイルが転送されるとすぐに削除されるため、ファイルは上書きされません(元の移動の前に存在するか、2つの移動順序の間に追加されない限り)ソース(別のパーティションまたはドライブ上にある場合)。


ああ、圧縮については考えていませんでした。
ニックボルトン

本当に圧縮する必要はありません。これには多くの時間を必要とします。圧縮レベルを0(ストレージ)にすると、大きなフォルダーをドライブ間ではるかに高速に移動することができます。
ウルフ

「Windowsでは、同じドライブとパーティションに移動すると、Unixのmvコマンドと同じように動作し、フォルダーの名前を変更するか、その親を変更します。」-Windowsエクスプローラーを使用する場合、それは正しくありません。それはたくさんのがらくたをし、それは時間がかかり、そしてあなたは2つのディレクトリに分割されたコンテンツで終わるかもしれません、私の質問に対するこの答えを見てください。
maaartinus

@maaartinus実際、Windowsエクスプローラーの動作は、親ノードを変更するのではなく、フォルダー内で再帰的に掘り下げることです。Windows Explorerの場合、それは単なるアトミックな動きではありません。私はコマンドラインが使用されていると仮定しました、私は尋ねるべきでした。
ウルフ

11

失敗することのない完全に安定したコンピューターであっても、タイムスタンプを気にする場合mvは、plainよりも優れていますcp

cp -aタイムスタンプは保存されますが、Windowsにも同様のものが存在すると思われます)。


1
ああ、タイムスタンプ。私はそれを考えていませんでした!+1
ニックボルトン

タイムスタンプは正直にも重要です
...-Marcin

1
@Marcin、彼らが理由でそこにいる、それがあなたが尋ねているものであるなら
...-macek

10

番号。

説明:

mv verybigdir dest

verybigdirの名前をdestに変更します。これはアトミック操作です。つまり、途中で失敗することはありません。

destが別のデバイスにある場合、mvは最初にコピーしてから古いバージョンを削除します。これはアトミック操作ではありません。失敗した場合は、destにverybigdirの部分的なコピーしかない場合がありますが、verybigdirはまだ完全です。

はい、他のアプリケーションは異なる方法でファイルを移動する場合があります。


2
実際、Linuxのmvは、ツリー全体を宛先にコピーしてからソース全体からツリー全体を削除するのではなく、各ファイルまたはディレクトリを個別にコピー/削除すると思います...そのため、途中でキャンセルすると、ファイルは両方の場所にあり、どちらのディレクトリも完全にはなりません。
ロブ・

3
@rob:いいえ。ディレクトリは他のファイルと同じであり、同じように扱われます。あなたが話している行動はで達成されmv verybigdir/* destます。
dmckee

2
基本的に、mvは各引数を「cp && rm」の方法mv verybigdir/* destで処理します... verybigdirのmvを多数の個別の移動操作に分割します。Windowsとは異なり、Linuxプログラム/ツールはそこに「*」が表示されず、シェルによって展開されることを常に覚えておいてください。
ユルゲンA.エアハルト

4

Windowsでは、移動ではなく常にコピーと削除を行います。私はかつてファイルを移動していましたが、これはまずメモリの不良スティックに気づいた場所です。ファイルを移動すると、その間で停止し、エラーが発生したため、ソースフォルダーをチェックし、ファイルがなくなった後、宛先をチェックし、破損したファイルがありました。これはより大きなサイズのファイルでより頻繁に発生し、それらのほとんどは数時間かかるダウンロードでしたので、コピーしてから削除することをお勧めします。最初は時間を節約して、最後には報われるでしょう。


3

UNIXでは、ファイルシステムの境界を越えない移動でmv、データをコピーしません。さまざまなディレクトリのiノードデータベースを更新するだけです。これは、大きなファイルよりもはるかに高速cpです。

さらに、mvファイルシステムの境界を越えて使用すると、単にコピーと削除のメカニズムが呼び出されます。

だから、あなたが好むべきだと思うmv


うまくまとめました。
ニックボルトン

「コピーと削除のメカニズム」は、「各ファイルをコピーしてから削除」または「すべてのファイルをコピーしてからすべてを削除」と解釈できます。
j_random_hacker

2

少なくともWindowsでは、移動は単なる自動化されたコピーと削除です。mvは各ファイルを個別に移動するので、^ c-ingがファイルを失うことはありません。キャンセルするとすべてが移動しないWindowsエクスプローラーとは異なり、ファイルは2つの場所に分割されます。

これに対する私の解決策は、移動したいと確信している場合を除き、移動しないでください。


1

ソースファイルシステムでACLを使用しているが、宛先では使用していない場合、Linuxのmvはソースをコピーしてから-宛先にACLを設定できないため、停止します。そのため、両方の側にファイルがあることになります。この動作を防ぐためのmvのスイッチはないため、この場合はcp && rmをお勧めします。

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