かなり大量のファイルに対して一連の操作を実行する必要があります。簡単のために、ペアの猫のための簡単な作業に焦点を当てて、ペアリングとシェルスクリプトの最も簡単なペアリング部分を作成する方法について説明します。
A.txt、B.txt、C.txt、およびD.txtという4つのファイルがあり、基本的に次のような圧縮スクリプトを作成しようとしているとします。
cat A.txt B.txt > AB.txt
cat A.txt C.txt > AC.txt
cat A.txt D.txt > AD.txt
cat B.txt C.txt > BC.txt
cat B.txt D.txt > BD.txt
cat C.txt D.txt > CD.txt
各ユニークな組み合わせの出力を望んでおり、この基準によれば、AD.txtとDA.txtは「固有」ではありません。
しかし、私はシェルスクリプトよりも少し簡単にしたいと思います。ここでは、他のファイルセットに対してこれを行い、ディレクトリで実行してすべての一致を再帰的に見つけることができます。私は道を間違えて仕事を台無しにしたように見えました。
find "$PWD" -type f -iname "*.txt" -exec [[SOME MAGIC CODE CREATING PAIRS OF FILE NAMES]] {} \;
\ cat "$MAGICPAIRfile1".txt "$MAGICPAIRfile2".txt >
\ "$MAGICPAIRfile1"-"$MAGICPAIRfile2".txt
これらの部分をいくつか実行しようと考えていました。 1つはファイル名をテキストバッファにダンプし(ファイル名文字列のバッファタイプが正しくないため、バッファが存在しない)、そのバッファを別のexec {} \;に渡すことでした。
しかし、他の人が良い考えを持っているかもしれないと思いましたか?
ベストアンサー1
これが私の提案です。
#!/bin/bash
files="empty"
for i in A B C D ; do
for j in B C D ; do
fn="$i$j"
nf="$( echo $fn | rev )"
# if nn is 1 $nf wasn't found in $files
nn=1
for q in $files ; do
if [[ "$q" == "$nf" ]] ; then
nn=0
fi
done
if [[ $nn -eq 1 ]] && [[ "$fn" != "$nf" ]]
then
echo "cat $i.txt $j.txt >$fn.txt"
fi
files="$fn $nf $files"
done
done