bashを使用して不完全なファイルを元のファイルに置き換える方法

bashを使用して不完全なファイルを元のファイルに置き換える方法

私は2つのディレクトリを持っていますが、どちらも異なるサブディレクトリを持っています。

抽出されたファイルの「半分」を.mkv別のプログラムからインポートしました。

秒には、.mkv完全に抽出された元のファイルが含まれています。


破損した.mkvファイルを元のファイルに置き換えるためにbashスクリプトを作成しようとしています。両方のディレクトリのファイル名は同じですが、サブディレクトリとファイルサイズは異なります。


find、およびに関連する多くのfdupesソリューションを作成または変更してみましたgrep

しかし、私はそれを動作させることはできません。誰でも私を助けることができますか?


不完全な例

#!/bin/bash

dirname1=/mnt/raid1/dir1
dirname2=/mnt/raid1/dir2
find $dirname1 -name '*.mkv'
while read fileName
do
find $dirname2 -type f | grep "$fileName"
done

ベストアンサー1

ファイル名が同じ場合は、単に以下を使用してくださいmv

# traverse the original's directory
for o in original/*/*.mkv; do
  # traverse the corrupted's directory
  for c in corrupted/*/*.mkv; do 
    # if a corrupted file has the same name as an original's
    # perform the `mv` command replacing the former
    if [[ "$(basename "$o")" = "$(basename "$c")" ]]; then
      mv -- "$o" "$c"; 
    fi
  done
done

二重ダッシュは次のことを--意味します。:

ガイドライン10:オプションではない最初の--パラメーターは、オプションの終わりを示す区切り文字として許可する必要があります。後続の引数は、「-」文字で始まってもオペランドとして処理する必要があります。

-iファイルを上書きする前に質問を表示するオプションを使用できます。何千ものファイルがある場合、これは問題になる可能性があります。

mv -i -- "$o" "$c"
mv: overwrite 'corrupted/<sub dir>/filename.mkv'?

メモ:一般的に言えば、上書き/削除操作を実行する前にデータをバックアップすることをお勧めします。

おすすめ記事