別のディレクトリのファイルを繰り返します。

別のディレクトリのファイルを繰り返します。

値を含み、複数のディレクトリに保存されたテキストファイルのセットがあります。複数のディレクトリの各ファイルにコマンドを適用できるように、ループを使用してコマンドを実行する必要があります。

私が思いついたコードは

#!/bin/bash
#
dir=`pwd`
datapath1=$dir/datafiles1
datapath2-$dir/datafiles2

for file in /$datapath1/*.txt ; do 
   sort -k1,1rn < "$file"
done > file.cat &&
# 
for file in /$datapath2/*.txt ; do 
   sort -k1,1rn < "$file"
done > file.cat &&
#

明らかに、これは多くのディレクトリで非常に困難です。単一ループに対応するための単純化された方法はありますか?

答え1

スクリプトに問題があります。すべてのループがオーバーライドされますfile.cat

ループ内のすべてのファイルを繰り返すことで問題を取り除き、スクリプトを簡素化できます。

#!/bin/bash

dir=$(pwd)
datapath1=$dir/datafiles1
datapath2=$dir/datafiles2

for file in "$datapath1"/*.txt "$datapath2"/*.txt; do 
   sort -k1,1rn < "$file"
done > file.cat

また、常に変数を引用してください。


Kusalanandaが指摘したように、ディレクトリ名が非常に似ている場合は、globを使用して関連するすべてのディレクトリとファイルのアドレスを指定することもできます。与えられた例では、これは実際に可能です

sort -k1,1rn "$PWD"/datafiles[12]/*.txt > file.cat

関連情報