FileZillaで誤ってフォルダを別のフォルダにドラッグアンドドロップしました。
~/big_folder
~/some_other_folder
移動したフォルダは非常に巨大です。数十万のファイル(node_modules、小さな画像ファイル、多数のフォルダー)が含まれています
とても奇妙なのは、マウスを離した後、移動が完了することです。 「big_folder」フォルダが「some_other_folder」に移動されます。
~/some_other_folder/big_folder
(移動後のbig_folder
には~/
はありません)
それから私は間違いを認識して戻りますが、FileZillaとターミナルの両方で失敗します。
次に、cp -r
内のファイルにアクセスするサーバー側コードがあるため、~/big_folder
を使用してファイルをコピーする必要があります。
そして、待つには永遠にかかる...
私は何をすべきか?
ところで、FileZillaからの出力は次のとおりです(元に戻すことに失敗したためです)。
Status: Renaming '/root/big_folder' to '/root/some_other_folder/big_folder'
Status: /root/big_folder -> /root/some_other_folder/big_folder
Status: Renaming '/root/some_other_folder/big_folder' to '/root/big_folder'
Command: mv "big_folder" "/root/big_folder"
Error: mv /root/some_other_folder/big_folder /root/big_folder: received failure with description 'Failure'
ディレクトリが移動が同じファイルシステム(同じパーティション)内にある場合、必要なことは、ディレクトリのファイルパスの名前を変更することだけです。ディレクトリ自体のディレクトリエントリ以外のデータを変更する必要はありません。
copyingディレクトリの場合、すべてのファイルのデータを複製する必要があります。これには、すべてのソースデータの読み取りと宛先での書き込みが含まれます。
ディレクトリの移動betweenファイルシステムには、データを宛先にコピーし、ソースから削除することが含まれます。これには、単一のファイルシステム内でデータをコピー(複製)するのと同じくらいの時間がかかります。
FileZillaがディレクトリの名前を~/big_folder
から~/some_other_folder/big_folder
に正常に変更した場合は、次のコマンドを使用して元に戻します。
mv ~/some_other_folder/big_folder ~/big_folder
...最初に~/big_folder
というディレクトリがないことを確認した後(存在する場合、移動すると、big_folder
からsome_other_folder
がサブフォルダとして~/big_folder
ディレクトリに移動されます) 。
既存の答えは素晴らしいですが、ファイルを移動するときとコピーするときの違いを正確に示すことで、少し詳しく説明したいと思います。コピー中にsyscallsを見ると、次のことがわかります。
open("hello1.txt", O_RDONLY) = 3
open("hello2.txt", O_WRONLY|O_CREAT, 0644) = 4
read(3, "Hello, world!\n", 4096) = 14
write(4, "Hello, world!\n", 14) = 14
close(3) = 0
close(4) = 0
これによりソースファイルが開き、2番目のファイルが作成されます。次に、ソースファイルの内容をメモリに読み取り、そのメモリを宛先ファイルに書き込みます。これには、いくつかのコンテキストスイッチといくつかのディスクI/Oが必要ですが、大きなファイルの場合は非常に高くなる可能性があります。ただし、ファイルを移動すると、次のように表示されます。
rename("hello1.txt", "hello2.txt") = 0
同じ物理ディスク上の同じパーティションにある場合にのみ、ファイルの名前が変更されることを覚えておくことが重要です。巨大な数ギガバイトのファイルを作成し、それを家の2つの場所の間で移動すると、アクションが即座に完了することがわかります。一方、外部デバイスに移動した場合は、代わりにcp
を使用した場合と同じように移動に時間がかかります。これは、同じパーティションにあるファイルの名前を変更することによってのみファイルを移動できるためです。