답변:
사용 bash는 내장 리디렉션 (tldp) :
cat file2 >> file1
sudo
받는 cat
명령 (메시지가 나타나면 자격 증명을 입력).
tee
프로그램을 살펴보십시오 : cat 1 | tee -a 2 3
. --append
(또는 -a
짧게) 스위치 뒤에 원하는만큼 파일을 넣을 수 있습니다 .
cat file2 >> file1
>>
연산자는 지정된 파일의 출력을 추가하거나 존재하지 않는 경우 지정된 파일을 생성한다.
cat file1 file2 > file3
이것은 둘 이상의 파일을 하나로 연결합니다. 필요한만큼 소스 파일을 가질 수 있습니다. 예를 들어
cat *.txt >> newfile.txt
업데이트 20130902
의견에서 유미로는 "시도하지 마십시오"라고 제안합니다 cat file1 file2 > file1
. 이것이 예상 된 결과를 얻지 못할 수있는 이유는 왼쪽의 명령 >
이 실행 되기 전에 경로 재 지정을받는 파일이 준비 되었기 때문입니다. 이 경우, 먼저 file1
, 그 제로 길이로 절단되고, 출력을 위해 개방 cat
지금 길이 제로 플러스 파일의 내용을 연결하는 명령 시도 file2
로이 file1
. 그 결과 원본 내용 file1
이 손실되고 그 대신 사본 file2
이 예상과 다를 수 있습니다.
업데이트 20160919
의견에서 tpartee는 지원 정보 / 소스에 대한 링크를 제안합니다. 권위있는 참고를 위해, 친절한 독자를 linuxcommand.org 의 sh 매뉴얼 페이지 로 안내합니다.
명령이 실행되기 전에 셸이 해석하는 특수 표기법을 사용하여 입력 및 출력을 리디렉션 할 수 있습니다.
그것은 독자에게 그들이 알아야 할 것을 알려주는 반면, 당신이 그것을 찾지 않고 단어별로 문장을 파싱하지 않으면 놓치기 쉽습니다. 여기서 가장 중요한 단어는 '전'입니다. 명령이 실행 되기 전에 리디렉션이 완료되거나 실패합니다 .
cat file1 file2 > file1
쉘 의 예제의 경우, 먼저 명령이 실행되기 전에 I / O 핸들이 실행되는 환경에 I / O 핸들이 위치하도록 경로 재 지정을 수행합니다.
리디렉션 우선 순위가 긴 친숙한 버전은 Ian Allen 웹 사이트에서 Linux 코스웨어 형태로 찾을 수 있습니다. 그의 I / O Redirection Notes (I / O 리디렉션 노트) 페이지에는 명령 없이도 리디렉션이 작동한다는 관찰을 포함하여이 주제에 대해 할 말이 많습니다. 이것을 쉘에 전달 :
$ >out
... 이름이 지정된 빈 파일을 만듭니다. 쉘은 먼저 I / O 경로 재 지정을 설정 한 다음 명령을 찾고, 아무것도 찾지 않고 작업을 완료합니다.
cat file1 file2 > file1
-아마도 당신이 기다리고있는 것처럼 작동하지 않습니다.
>>
하는 것입니다 파일을 수정을 file1
. T.Rob은 사실 부정확 한 것을 제출하기 위해 경주하는 것보다 그의 대답을 설명하는 데 훨씬 뛰어난 일을했습니다. 질문의 텍스트를 바탕으로 cat file1 file2 > file3
@asir이 찾고있는 적절한 명령 이라고 생각합니다 .
>
이 먼저 실행 된다는 것 입니다. 따라서 cat file1 file2 > file1
먼저 clobber file1
을 실행 하면 길이가 0 인 파일을 자체에 복사하려고 시도합니다. 이는 작업이 발생할 수있는 순서와 수행해야하는 순서에 대해 생각할 때 의미가 있지만 미묘하여 많은 사람들을 놀라게 할 수 있습니다. 그래서 다른 것이 없다면, 유미로와 당신은 대답을 더 향상 시켰습니다. 고마워요!
>>
추가 하고 파일을 >
바꿉니다 .
참고로 ddrescue를 사용하면 예를 들어 큰 파일이 있고 일시 중지 한 다음 나중에 수행해야하는 경우 작업을 수행 할 수있는 중단 가능한 방법을 제공합니다.
ddrescue -o $(wc --bytes file1 | awk '{ print $1 }') file2 file1 logfile
는 logfile
중요한 비트입니다. Ctrl-C
똑같은 명령을 다시 지정 하여 프로세스를 중단 하고 다시 시작할 수 있으며 ddrescue는 logfile
중단 된 위치부터 읽고 다시 시작합니다. -o A
플래그 바이트에서 시작 ddrescue을 알려줍니다 출력 파일에 ( ). 따라서 크기를 바이트 단위로 추출합니다 ( 원하는 경우 출력을 붙여 넣을 수 있음 ).file1
wc --bytes file1 | awk '{ print $1 }'
file1
ls
주석에서 ngks 가 지적한 것처럼 단점은 ddrescue가 기본적으로 설치되지 않을 것이므로 수동으로 설치해야한다는 것입니다. 다른 합병증은 저장소에있을 수있는 두 가지 버전의 ddrescue가 있다는 것입니다. 자세한 내용은 이 askubuntu 질문 을 참조하십시오. 원하는 버전은 GNU ddrescue이고 데비안 기반 시스템에서는 다음과 같은 이름의 패키지입니다 gddrescue
.
sudo apt install gddrescue
다른 배포판의 경우 패키지 관리 시스템에서 ddrescue 의 GNU 버전을 확인하십시오 .
다른 해결책 :
cat file1 | tee -a file2
tee
다음과 같이 원하는만큼 파일을 추가 할 수있는 이점이 있습니다.
cat file1 | tee -a file2 file3 file3
의 내용을 추가합니다 file1
에를 file2
, file3
하고 file4
.
매뉴얼 페이지에서 :
-a, --append
append to the given FILEs, do not overwrite
cat
쉬운 해결책이 될 수 있지만 큰 파일을 연결할 때 매우 느려집니다 find -print
. 고양이를 한 번 사용해야하지만 구출하는 것입니다.
amey@xps ~/work/python/tmp $ ls -lhtr
total 969M
-rw-r--r-- 1 amey amey 485M May 24 23:54 bigFile2.txt
-rw-r--r-- 1 amey amey 485M May 24 23:55 bigFile1.txt
amey@xps ~/work/python/tmp $ time cat bigFile1.txt bigFile2.txt >> out.txt
real 0m3.084s
user 0m0.012s
sys 0m2.308s
amey@xps ~/work/python/tmp $ time find . -maxdepth 1 -type f -name 'bigFile*' -print0 | xargs -0 cat -- > outFile1
real 0m2.516s
user 0m0.028s
sys 0m2.204s
time (find . -maxdepth 1 -type f -name 'bigFile*' -print0 | xargs -0 cat -- > outFile1)
과 같이 전체 명령의 타이밍 을 설정하십시오. 그러면 고양이 전용 명령과 비슷한 결과가 나타납니다.
cat
솔직히 cat
더 읽기 쉽지만 이 작업을 수행하지 않고도이 작업을 수행 할 수 있습니다 .
>> file1 < file2
은 >>
추가 STDIN을 로 file1
하고이 <
덤프 file2
에 STDIN .