名前に「_BASE_」が含まれていないファイルを連結したい。私はそれがどこかにあるだろうと思った...
ls | grep -v _BASE_ | cat > all.txt
猫の部分は私が正しくないものです。誰かが私にこれについていくつかのアイデアを与えることができますか?
これを試して
ls | grep -v _BASE_ | xargs cat > all.txt
オプションを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=shell
SomeFileが'Some File'として印刷され、1つのファイルとして解釈される場合。
ls
もう1つの問題は、出力ファイルがedファイルの1つと同じである可能性があることです。私たちもそれを無視する必要があります。
したがって、答えは次のとおりです。
outputFile=a.txt; ls --ignore="*sh*" --ignore="${outputFile}" --quoting-style=shell | xargs cat > ${outputFile}
サブディレクトリからもファイルを取得したい場合は、「find」が最適です。
find . -type f ! -name '*_BASE_*' ! -path ./all.txt -exec cat {} >> all.txt \+
現在のディレクトリとそのサブディレクトリ内のファイルを検索し、ファイル(-type f
)のみを検索し、ワイルドカードパターン*_BASE_*
に一致するファイルを無視し、を無視して、同じ方法でall.txt
実行します。cat
xargs