[bash] Bash에서 여러 텍스트 파일을 단일 파일로 연결

디렉토리의 모든 * .txt 파일을 하나의 큰 텍스트 파일로 결합하는 가장 빠르고 실용적인 방법은 무엇입니까?

현재 cygwin이있는 창을 사용하고 있으므로 BASH에 액세스 할 수 있습니다.

Windows 셸 명령도 좋지만 하나가 의심됩니다.



답변

그러면 all.txt에 출력이 추가됩니다.

cat *.txt >> all.txt

all.txt를 덮어 씁니다.

cat *.txt > all.txt


답변

지금까지 제공된 모든 솔루션에 대해 쉘은 파일이 연결되는 순서를 결정합니다. IIRC Bash의 경우 알파벳 순서입니다. 순서가 중요한 경우 파일 이름을 적절하게 지정하거나 (01file.txt, 02file.txt 등) 각 파일을 원하는 순서대로 지정해야합니다.

$ cat file1 file2 file3 file4 file5 file6 > out.txt


답변

Windows 쉘 명령 type은 다음을 수행 할 수 있습니다.

type *.txt >outputfile

Type type명령은 또한 파일 이름을 stderr에 기록하는데, 이는 경로 >재 지정 연산자에 의해 캡처되지 않지만 콘솔에는 표시됩니다.


답변

Windows 셸 copy을 사용 하여 파일을 연결할 수 있습니다.

C:\> copy *.txt outputfile

도움에서 :

파일을 추가하려면 대상에 단일 파일을 지정하고 소스에 여러 파일을 지정하십시오 (와일드 카드 또는 file1 + file2 + file3 형식 사용).


답변

이러한 방법 중 어느 것도 많은 파일에서 작동하지 않으므로주의하십시오. 개인적으로 나는이 줄을 사용했다 :

for i in $(ls | grep ".txt");do cat $i >> output.txt;done

편집 : 누군가가 코멘트에 말했듯이, 당신은 대체 할 수 $(ls | grep ".txt")와 함께$(ls *.txt)

편집 : @gnourf_gnourf 전문 지식 덕분에 glob 를 사용하는 것이 디렉토리의 파일을 반복하는 올바른 방법입니다. 결과적으로 같은 신성 모독적인 표현은 다음과 같이 $(ls | grep ".txt")대체되어야합니다 *.txt( 여기 의 기사 참조 ).

좋은 해결책

for i in *.txt;do cat $i >> output.txt;done


답변

쉘에서 가장 실용적인 방법은 cat 명령입니다. 다른 방법으로는

awk '1' *.txt > all.txt
perl -ne 'print;' *.txt > all.txt


답변

이 방법은 어떻습니까?

find . -type f -name '*.txt' -exec cat {} + >> output.txt