.tbzに変換するか、他の方法を使用して違いを見つける

.tbzに変換するか、他の方法を使用して違いを見つける

フォルダーが 2 つあります。フォルダー A には合計 1786 個の dm4 ファイルがあり、フォルダー B には合計 2131 個の tbz (フォルダー A と B の両方で使用可能な dm4 のアーカイブ ファイル) ファイルと、フォルダー A にはない 124 個の dm4 ファイルがあります。

目標は、すべての dm4 を 1 つのフォルダーにまとめ、フォルダー B に tbz ファイルがある dm4 が欠落していないことを確認することです。ただし、欠落している 124 個の dm4 ファイルをすべてフォルダー B から A にコピーすると、1910 個の DM4 ファイルが追加されます。ただし、フォルダー B には 2131 個の tbz があると表示されます。つまり、フォルダー b にある残りの 221 個の dm4 ファイル/tbz ファイルの名前を知る必要があるということです。そうすれば、それらが dm4 のリストから欠落していることがわかります。

この場合に不足している dm4s/tbz ファイルを見つける最も簡単な方法は何ですか。

答え1

理解していることを確認するために、これは正しいですか?

2131 個の .tbz ファイルがあり、それぞれに対応する .dm4 ファイル (example-file-09.tbz、example-file-09.dm4) があるはずです。ただし、対応する dm4 ファイルがいくつか不足しており、どれがそれであるかを見つける必要があります。

それが正しいと仮定すると、これは動作するはずです(ファイル名に空白が含まれていないと仮定します)

dm4_files="$(find A -name '*.dm4')"
for file in $(find B -name '*.tbz'); do 
  # || is a logical or operator; bash will only execute the right side if the left side fails (returns a non-zero exit code)
  echo -e "$dm4_files" | grep -q "$(basename $file .tbz).dm4" || echo "Missing $(basename $file .tbz).dm4"
done

編集: コメントのフォーマットが不十分なため、実行手順を追加します

ターミナルから実行するには:

  1. 上記の A と B を、問題のディレクトリへのフルパスに変更します (または、両方を含むディレクトリに cd します)
  2. コマンドを貼り付ける

スクリプトから実行するには:

  1. コマンドを、A と B のディレクトリにある check-dm4.sh のような名前のファイルに置きます (.sh サフィックスは何もしませんが、シェル スクリプトでは慣例となっています)。
  2. ファイルの先頭(最初の行)に次の行を挿入します。 #!/bin/bash
  3. ファイルを実行可能としてマークします(chmod +x check-dm4.sh、または右クリック->プロパティ/ディストリビューションの呼び方)4. ファイルを実行します

関連情報