名前に "_BASE_"が含まれていないファイルを連結したいとします。unix:grepでマッチしたファイルを連結する方法
ls | grep -v _BASE_ | cat > all.txt
猫の部分は私が正しくなっていないものです。誰も私にこれについて何か考えを与えることができますか?
名前に "_BASE_"が含まれていないファイルを連結したいとします。unix:grepでマッチしたファイルを連結する方法
ls | grep -v _BASE_ | cat > all.txt
猫の部分は私が正しくなっていないものです。誰も私にこれについて何か考えを与えることができますか?
はあなたが--ignore
オプション、次にファイルに猫それらを使用してls
でいくつかのファイルを無視することができ、この
ls | grep -v _BASE_ | xargs cat > all.txt
を試してみてください。
ls --ignore="*_BASE_*" | xargs cat > all.txt
また、あなたはxargs
せずにそれを行うことができます。
cat $(ls --ignore="*_BASE_*") > all.txt
UPD: デールHagglundは気づいた、のようなそのファイル名は "いくつかのファイルは、" 2つのファイル名、 "一部" と「ファイルとして表示されます" --quoting-style=WORD
オプションを使用できないようにするには、WORD
をshell
またはescape
とすることができます。
たとえば、--quoting-style=shell
の場合、一部のファイルは「一部のファイル」として印刷され、1つのファイルとして解釈されます。
別の問題は、出力ファイルがls
edファイルのいずれかと同じである可能性があることです。私たちもそれを無視する必要があります。
だから答えは:
outputFile=a.txt; ls --ignore="*sh*" --ignore="${outputFile}" --quoting-style=shell | xargs cat > ${outputFile}
あなたもサブディレクトリからファイルを取得したい場合は、 `「見つけるあなたの友達です:
find . -type f ! -name '*_BASE_*' ! -path ./all.txt -exec cat {} >> all.txt \+
は、それが現在のディレクトリとそのサブディレクトリ内のファイルを検索し、ファイル(-type f
)のみを検索し、ワイルドカードパターン*_BASE_*
に一致するファイルを無視し、all.txt
を無視し、xargs
と同じ方法でcat
を実行します。
+1現在のディレクトリに制限するには、-maxdepth 1を追加します。この名前も、その名前のファイルスペースをきれいに処理する必要があります。 – jackrabbit
私は '* _BASE_ *'の部分を引用しています(そうでなければzshでは動作しません)。また、rm all.txtの前に付いて、catのリダイレクションを>>で行います。最後の+はおそらくaであるべきです。 – jackrabbit
\ +は猫の数を減らすための意図的な選択です。 – tuomasjjrasanen
いずれのファイル名にも空白が含まれていない場合、これらのどちらも機能しません。 "Some File"のようなファイル名は、 'cat'に渡されるときに、" Some "と" File "という2つのファイル名で表示されます。 –
答えを修正しました –