[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