フォルダーが 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
編集: コメントのフォーマットが不十分なため、実行手順を追加します
ターミナルから実行するには:
- 上記の A と B を、問題のディレクトリへのフルパスに変更します (または、両方を含むディレクトリに cd します)
- コマンドを貼り付ける
スクリプトから実行するには:
- コマンドを、A と B のディレクトリにある check-dm4.sh のような名前のファイルに置きます (.sh サフィックスは何もしませんが、シェル スクリプトでは慣例となっています)。
- ファイルの先頭(最初の行)に次の行を挿入します。
#!/bin/bash
- ファイルを実行可能としてマークします(chmod +x check-dm4.sh、または右クリック->プロパティ/ディストリビューションの呼び方)4. ファイルを実行します