2017-02-14 4 views
0

私は一連のディレクトリでcsvファイルのすべてのインスタンスを見つけて、それらを1つのcsvファイルに連結しようとしています。Bash:2桁のファイル名を見つけて連結する

キャッチは、ディレクトリに番号が付けられていることです。私は2桁で終わるディレクトリだけを望んでいます。たとえば、ディレクトリRUN11、RUN12などが必要ですが、RUN1、RUN2は必要ありません。

私は(hereから)私はこれを行うだろうと、2桁の数字を持っていることについて

find $(pwd)/RUN* -name '*csv' |xargs cat > big_cat_file.csv 

を気にしなかった場合、私はこの試みた:

find $(pwd)/RUN[!0-9]{2} -name '*csv' |xargs cat > big_cat_file.csv 

をしかし、それはそのようなファイルを言いませんまたはディレクトリ。

RUN11、RUN12のような名前のディレクトリからcsvファイルを取得する方法はありますが、RUN1、RUN2は使用できません。

+0

グロブと正規表現が混在しています。 '[!0-9]'はグロビング( ''^[^ 0-9] ')で、' {2} 'はグロブでは利用できない正規表現の量指定子です。 – cdarke

答えて

3

globを使用する必要がある正規表現構文を使用しようとしています。

find "$PWD"/RUN[0-9][0-9] -name '*csv' |xargs cat > big_cat_file.csv 

[!0-9]が桁を除く任意の一文字と一致していることに注意してください。)

その法的なファイル名に対応するために:あなただけではなく{2}を使用するよりも、二度の範囲を指定する必要が

*csvと一致する場合は、xargsの代わりに-execプライマリを使用する必要があります。 (ファイル名に空白が含まれている場合に発生する、あるいは最悪の場合には、改行どうなるか考えてみましょう。)

find "$PWD"/RUN[0-9][0-9] -name '*csv' -exec cat {} + > big_cat_file.csv 

これだけではなく、任意の有効なファイル名を指定して動作しますが、必要とされているcatへのコール数を最小限に抑えます。

関連する問題