2000個のファイルを含むディレクトリがありました。
次のコマンドを実行して、これらの2000ファイルをターゲットディレクトリに移動しました。
find /opt/alfresco \
-type f \( -iname \*.pdf -o -iname \*.xml \) \
-exec mv {} /opt/alfresco/archived/2020-01-07 \; > /opt/alfresco/scripts/move.log
しかし、宛先パスの最後に/
を追加するのを忘れました。したがって、上記のコマンドが行ったことは、2020-01-07
という名前のファイルを作成し、バイナリコンテンツを書き込んだため、現在は読み取ることができません。そして私の2000ファイルはなくなった。この2020-01-07
ファイルのサイズは220 KBです。しかし、これらの2000ファイルの合計サイズは約1 GBでした。
これらの2000ファイルを復元する方法はありますか?または、このファイルを2020-01-07
からディレクトリ2020-01-07
に変換して、データを戻す方法はありますか?
/opt/alfresco/archived/2020-01-07
ディレクトリが明らかに存在しないため、宛先パス2020-01-07
の末尾にスラッシュを追加すると、mv
コマンドがエラーになります。これでファイルが保存されます。
/opt/alfresco/archived/2020-01-07
が既存のディレクトリであった場合(宛先パスの末尾にスラッシュがあるかどうかに関係なく)、ファイルはそのディレクトリに移動された場合にも保存されます(ファイル名の衝突がまだ発生する可能性があります)ただし、ファイルを複数のディレクトリから単一のディレクトリに移動すると、問題が発生します)。これがあなたがやりたかったことです。忘れていたのは、最初にそのディレクトリを作成することでした。
ここで、ディレクトリが存在しなかったため、find
コマンドが実行したのは、個々のXMLとPDFファイルを取得し、/opt/alfresco/archived/2020-01-07
に名前を変更してから、前のファイルを上書きする次のファイル。
ファイル/opt/alfresco/archived/2020-01-07
が最後のXMLまたはPDF find
で見つかったファイル)になりました。
/opt/alfresco
全体でfind
コマンドを実行したので、PDFまたは/opt/alfresco/archived
の下のディレクトリなど、そのパスの下にあるXMLファイルは、同じ運命。
これはとても簡単なエラーです。失われたファイルをバックアップから復元する以外に、失われたファイルを回復する便利な方法はありません。
データのバックアップを1時間ごとに作成しない場合、これは、それを検討するための開始点として適切な場合があります。個人ファイルのバックアップを行う場合は、restic
またはborgbackup
をお勧めします。これは、ある種のオフサイトまたは少なくとも外部ストレージに対して行うことが望ましいです。
次の質問と回答が役立つ場合があります。
このスクリプトの次の書き換えでは、archived
サブディレクトリを無視して、mv -n -t
を使用することができます。また、find
は場所を出力しないため、見つかったファイルを明示的に-print
する(またはmv -v
を使用する)必要があります。
find /opt/alfresco \
-path /opt/alfresco/archived -Prune -o \
-type f \( -iname '*.pdf' -o -iname '*.xml' \) \
-exec mv -n -t /opt/alfresco/archived/2020-01-07 {} + \
-print >/opt/alfresco/scripts/move.log
知っておくと便利なコメント(下)のいくつかのこと:
GNU mv
が-t target
で使用されている場合、target
がディレクトリでない場合は失敗します。-exec mv -t /opt/alfresco/archived/2020-01-07 {} +
を使用して、find
で一度に複数のファイルを移動します(これにより、操作もスピードアップします)。
GNU mv
を-n
と共に使用すると、既存のファイルの上書きが拒否されます。
-t
も-n
も標準ではありません(ただし、macOSとFreeBSDには-n
もあります)。ただし、システム間で移植する必要のないスクリプトでそれらを使用することを妨げるものではありません。 。