それぞれ数千のファイルを含む2つのフォルダがあります。昨年の1つのフォルダには、各ファイルに文字と年の接頭辞(a2020abc123.txt)があり、今年の同じファイルは同じ形式の別のフォルダ(a2021abc123.txt)にあります。昨年と今年の間で大きく異なるファイルを見つけるには、これら2つのフォルダを比較する必要があります。私たちのチームはいつもこんなことをします。手でだから私はより速く、エラーが少なくなる方法を望んでいます。
たとえば、
/folder1/a2021fileA123.txt 50kb
/folder2/a2022fileA123.txt 80kb
/folder1/a2021fileA124.txt 79kb
/folder2/a2022fileA124.txt 80kb
/folder1/a2021fileA125.txt 90kb
/folder2/a2022fileA125.txt 80kb
理想的には、次の内容が返されます。
/folder1/a2021fileA123.txt 50kb
/folder2/a2022fileA123.txt 80kb
/folder1/a2021fileA125.txt 90kb
/folder2/a2022fileA125.txt 80kb
/folder1/a2021fileA124.txt 79kb
/folder2/a2022fileA124.txt 80kb
上記のようにファイルのペアをまとめてグループ化する必要があります。私はawkのようなツールを使用することは非常に慣れていないと私たちのチームはpowershellを好む。とても感謝しています。私はその後数週間夢でこのファイル名を見ました。
答え1
これで何をしたいのかわかりません。少なくとも開始点は次のとおりです。これにより、フォルダ内のファイルを見つけて印刷でき、前にサイズ(バイト)が付けられます。
find folder1 folder2 -type f -printf '%s %P\n'
たとえば、質問のリストを手動で編集するだけです。
50000 a2021fileA123.txt
80000 a2022fileA123.txt
79000 a2021fileA124.txt
80000 a2022fileA124.txt
90000 a2021fileA125.txt
80000 a2022fileA125.txt
このawkコマンドにパイプすると、2022バージョンファイルと2021バージョンファイルのサイズの違いが出力されます。
$ cat tst.awk
{
size = $1
year = substr($2,2,4)
base = substr($2,6)
bases[base]
map[base,year] = size
}
END {
for ( base in bases ) {
print base, map[base,2022] - map[base,2021]
}
}
$ find folder1 folder2 -type f -printf '%s %P\n' | awk -f tst.awk
fileA125.txt -10000
fileA123.txt 30000
fileA124.txt 1000
sort
サイズの違いに応じて出力を並べ替えるには、以下をパイプします。
$ find folder1 folder2 -type f -printf '%s %P\n' | awk -f tst.awk | sort -k2,2rn
fileA123.txt 30000
fileA124.txt 1000
fileA125.txt -10000
お役に立てば幸いです。
答え2
あなたはする必要がありますdiff
#!/bin/sh
cd folder1
for f in *
do
diff $f ../folder2/$f
done