エラーにもかかわらず、ディレクトリの移動

エラーにもかかわらず、ディレクトリの移動

ディレクトリを別のドライブに移動するときにエラーが発生した場合、何も削除されません。この種のエラーが発生します。

mv: cannot stat ‘originaldirectory/longpath/irrelevantfile’: Input/output error

私の考えではmv

  • 数回やり直してください(簡単でも何も解決しないかもしれません)。
  • 正常に移動されたファイルの削除

これにより、問題のあるファイルのみがソースフォルダに残ります。

答え1

これより良いツールがありますmv。私が好きなものの一つはですrsync

rsync --remove-source-files -avHP /path/to/source/ /path/to/destination/

--dry-run許可されている場合は、実際にフラグを使用する前にフラグを試してください。またはフラグを省略すると、この--remove-source-filesように動作します。cpmv

rsyncoverの利点はmv、中断可能で繰り返し可能であることです。したがって、エラーが原因で競合が発生した場合は、再起動してください。または、しばらくループで実行してください。

for try in 1 2 3
do
    rsync --remove-source-files -avHP /path/to/source/ /path/to/destination/ && break

    echo -n 'Pausing...'
    sleep 10 || break
    echo
done

答え2

まず、ターゲットからソースのディレクトリツリーを再構築します。

cd source
find -type d -exec mkdir -p destination/{} \;

{}find各ディレクトリの相対パスを含める必要があります。

次に、ターゲットに作成したディレクトリツリーが正しいことを確認してください。そして、各ファイルを個別に移動してみてください。

cd source
find -type f -exec mv {} destination/{} \;

これが潜在的にどれほど危険なのかは言えません。データが失われる可能性があります!ファイルを生成できない場合はfindどうすればいいかわかりません。stat私の願いは、メッセージエラーが発生して続行することです。ただし、破損したメディアからデータを回復しようとしていることは明らかであるため、どのようなリスクも認識しています。

これが期待どおりに機能した場合、ソースに残ったのは移動できないディレクトリとファイルだけです。必要に応じて、空のディレクトリを再帰的に削除する方法を検索して(この質問が以前に要求されたことがあると100%確信している)、分析を簡単に作成できます。

破損したメディアから小さなテストケースを作成することをお勧めします。mkdirいくつかのディレクトリ、touchランダムファイル、および手順を試して、何が起こっているかを確認してください。ルートディレクトリではなく、一度に1つのディレクトリでこれを行うのも良い考えです。


たとえば、あなたの構造が次のような場合:

.
├── dir1
│   ├── fileA
│   └── subdir1
│       └── fileB
├── dir2
│   └── fileC
└── dir3
    ├── subdir1
    │   └── fileD
    └── subdir2
        └── fileE

その後、一度3回実行し、すべてが順調に進むと、すべての操作を一度に実行するのではなく、dir1に移動します。dir2dir3.

関連情報