特定のフォルダ内のすべてのファイルをコピーして1つのファイルにリンクするにはどうすればよいですか?

特定のフォルダ内のすべてのファイルをコピーして1つのファイルにリンクするにはどうすればよいですか?

シェルスクリプティング技術を向上させたい。私がやりたいことは、特定のフォルダ内のすべてのファイルを別の宛先フォルダにコピーしてからリンクしてファイルに保存することです。

以下は私の簡単なコードです。

path=/Users/sclee/Dropbox/project/java/projects/WaferPointDraw/src/main/resources/pattern
dest=/Users/sclee/Dropbox/journal/clustering_ieee_semi_2020/data/small_datasets/noise200000other2000
output=large_datast_3.txt

mkdir -p $dest;
echo "$dest directory is created"
for i in `find ${path} -iname '*.txt'`;
do
        cp $i $dest;
done
echo "all the files is copied"

cat ${dest}/* > ${dest}/${output}
echo "created the combined file"

上記のコードで目標を達成できますが、forループのすべてのロジックを処理したいと思います。ご覧のとおり、このcatコマンドはforループの外部で実行されます。for簡単なコードでループで処理したいです。

どんな助けでも大変感謝します。

ありがとうございます。

答え1

Onelinerは以下を使用しますfind

find "$path" -iname '*.txt' -exec cp {} "$dest" \; -exec sh -c "cat {} >> $dest/$output" \;

答え2

私が正しく理解していたら、交換することができます

do
  cp $i $dest;
done

そして

do
  cat $i>>${dest}/${output};
done

結果を出力ファイルに追加します。

答え3

Q:$ pathにtxtファイルがありますが、すべてのtxtファイルを見つけるために入れたいサブディレクトリがありますか?そうでなければ必要ではなく、findそれでfor file in "$path"/*.txt十分です。

実際、すべてのファイルが1つのディレクトリにある場合、ループは必要ありません。

cp -t "$dest" "$path"/*.txt
cat "$path"/*.txt > "$dest/$output"

中括弧内の変数は、引用符内の${var}変数と同じではありません。"$var"

関連情報