2011-12-16 5 views

答えて

4

はあなたが--ignoreオプション、次にファイルに猫それらを使用してlsでいくつかのファイルを無視することができ、この

ls | grep -v _BASE_ | xargs cat > all.txt 
2

を試してみてください。

ls --ignore="*_BASE_*" | xargs cat > all.txt 

また、あなたはxargsせずにそれを行うことができます。

cat $(ls --ignore="*_BASE_*") > all.txt 

UPD: デールHagglundは気づいた、のようなそのファイル名は "いくつかのファイルは、" 2つのファイル名、 "一部" と「ファイルとして表示されます" --quoting-style=WORDオプションを使用できないようにするには、WORDshellまたはescapeとすることができます。

たとえば、--quoting-style=shellの場合、一部のファイルは「一部のファイル」として印刷され、1つのファイルとして解釈されます。

別の問題は、出力ファイルがls edファイルのいずれかと同じである可能性があることです。私たちもそれを無視する必要があります。

だから答えは:

outputFile=a.txt; ls --ignore="*sh*" --ignore="${outputFile}" --quoting-style=shell | xargs cat > ${outputFile} 
+0

いずれのファイル名にも空白が含まれていない場合、これらのどちらも機能しません。 "Some File"のようなファイル名は、 'cat'に渡されるときに、" Some "と" File "という2つのファイル名で表示されます。 –

+0

答えを修正しました –

1

あなたもサブディレクトリからファイルを取得したい場合は、 `「見つけるあなたの友達です:

find . -type f ! -name '*_BASE_*' ! -path ./all.txt -exec cat {} >> all.txt \+ 

は、それが現在のディレクトリとそのサブディレクトリ内のファイルを検索し、ファイル(-type f)のみを検索し、ワイルドカードパターン*_BASE_*に一致するファイルを無視し、all.txtを無視し、xargsと同じ方法でcatを実行します。

+0

+1現在のディレクトリに制限するには、-maxdepth 1を追加します。この名前も、その名前のファイルスペースをきれいに処理する必要があります。 – jackrabbit

+0

私は '* _BASE_ *'の部分を引用しています(そうでなければzshでは動作しません)。また、rm all.txtの前に付いて、catのリダイレクションを>>で行います。最後の+はおそらくaであるべきです。 – jackrabbit

+0

\ +は猫の数を減らすための意図的な選択です。 – tuomasjjrasanen

関連する問題