ディレクトリを別のドライブに移動するときにエラーが発生した場合、何も削除されません。この種のエラーが発生します。
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
ように動作します。cp
mv
rsync
overの利点は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
に移動します。dir2
dir3
.