3

名前に「_BASE_」が含まれていないファイルを連結したい。私はそれがどこかにあるだろうと思った...

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

猫の部分は私が正しくないものです。誰かが私にこれについていくつかのアイデアを与えることができますか?

4

3 に答える 3

4

これを試して

ls | grep -v _BASE_ | xargs cat > all.txt
于 2011-12-16T08:21:44.110 に答える
2

オプションをls使用して一部のファイルを無視し、それらをファイルにまとめることができます。--ignore

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

また、あなたはそれなしでそれを行うことができますxargs

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

UPD:Dale Hagglundは、「SomeFile」のようなファイル名が「Some」と「File」の2つのファイル名として表示されることに気づきました。これを回避するには、--quoting-style=WORDオプションを使用WORDできshellますescape

たとえば、--quoting-style=shellSomeFileが'Some File'として印刷され、1つのファイルとして解釈される場合。

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

したがって、答えは次のとおりです。

outputFile=a.txt; ls --ignore="*sh*" --ignore="${outputFile}" --quoting-style=shell | xargs cat > ${outputFile}
于 2011-12-16T08:22:31.337 に答える
1

サブディレクトリからもファイルを取得したい場合は、「find」が最適です。

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

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

于 2011-12-16T08:35:54.430 に答える