PowerShell을 사용하여 파일 연결
PowerShell 3을 사용하고 있습니다.
파일을 연결하는 모범 사례는 무엇입니까?
file1.txt + file2.txt = file3.txt
PowerShell은 이 작업을 직접 수행할 수 있는 기능을 제공합니까?아니면 각 파일의 내용을 로컬 변수에 로드해야 합니까?
모든 파일이 동일한 디렉터리에 있고 단순 패턴으로 일치할 수 있는 경우 다음 코드는 모든 파일을 하나로 결합합니다.
Get-Content .\File?.txt | Out-File .\Combined.txt
저는 이 길을 갈 것입니다.
Get-Content file1.txt, file2.txt | Set-Content file3.txt
Set-Content의 기본값인 ASCII가 아닌 다른 것이 필요한 경우 Set-Content에서 -Encoding 매개 변수를 사용합니다.
더 많은 유연성이 필요하다면 다음과 같은 것을 사용할 수 있습니다.
Get-ChildItem -Recurse *.cs | ForEach-Object { Get-Content $_ } | Out-File -Path .\all.txt
경고:단순을 사용한 연결Get-Content(사용 여부에 관계없이)-Rawflag)는 텍스트 파일에 대해 작동합니다. Powershell은 이에 대해 너무 유용합니다.
- 없이.
-Raw줄 바꿈(즉, 말장난 의도)을 "수정"하거나 Powershell이 생각하는 줄 바꿈을 "수정"합니다. - 와 함께
-Raw파이프라인의 끝에 추가되는 각 파일 부분의 끝에 종료 줄 끝(일반적으로 CR+LF)이 표시됩니다.새로운 파워셸의 세트 콘텐츠에 옵션이 있습니다.
이진 파일(즉, 어떤 이유로 분할되어 다시 결합해야 하는 임의 파일)을 연결하려면 다음 중 하나를 사용합니다.
Get-Content -Raw file1, file2 | Set-Content -NoNewline destination
또는 이런 것들:
Get-Content file1 -Encoding Byte -Raw | Set-Content destination -Encoding Byte
Get-Content file2 -Encoding Byte -Raw | Add-Content destination -Encoding Byte
또는 CMD 셸을 사용하여
copy file1 /b + file2 /b + file3 /b + ... destinationfile
부품을 덮어쓰지 않아야 합니다. 즉, 부품을 대상으로 사용해야 합니다.대상 파일은 모든 부품과 달라야 합니다.그렇지 않으면 예상치 못한 일이 발생할 수 있으므로 파일 부분의 백업 복사본을 찾아야 합니다.
gc file1.txt, file2.txt > output.txt
이 정도면 짧은 것 같아요.
연결이 특정 순서로 수행되도록 하려면 다음을 사용합니다.Sort-Object -Property <Some Name>논쟁.예를 들어, 이름 정렬을 기준으로 오름차순으로 연결합니다.
Get-ChildItem -Path ./* -Include *.txt -Exclude output.txt | Sort-Object -Property Name | ForEach-Object { Get-Content $_ } | Out-File output.txt
중요: -Exclude그리고.Out-File 동일한 값을 포함해야 합니다. 그렇지 않으면 재귀적으로 계속 추가됩니다.output.txt디스크가 가득 찰 때까지.
참고로 추가해야 합니다.*말에-Path당신이 사용하고 있기 때문에 논쟁.-IncludeGet-ChildItem 설명서에 언급된 대로.
@Keith 답변에 기초한 일반화:
gc <some regex expression> | sc output
다음은 Powershell 7을 기반으로 zip-in-image 파일을 만드는 방법에 대한 흥미로운 예입니다.
Get-Content -AsByteStream file1.png, file2.7z | Set-Content -AsByteStream file3.png
Get-Content -AsByteStream file1.png, file2.7z | Add-Content -AsByteStream file3.png
대용량(5GB 이상) 파일을 다루고 있었기 때문에 위의 예 중 어느 것도 제대로 작동하지 않았습니다.Set-Content는 먼저 메모리에 모두 로드된 다음(RAM 사용량 증가) 모두 기록합니다.대신 텍스트 스트림 쓰기가 더 좋습니다.저는 이 질문에 대한 답을 보고 헤더 파일과 데이터 파일을 결합하기 위해 아래와 같은 접근법을 적용했습니다!
$file = [system.io.file]::OpenWrite("$($pwd.Path)\out.txt")
$writer = New-Object System.IO.StreamWriter($file)
cat headers.txt,data.txt | ForEach-Object { $writer.WriteLine($_) }
$writer.Close()
$file.Close()
언급URL : https://stackoverflow.com/questions/16952138/concatenate-files-using-powershell
'codememo' 카테고리의 다른 글
| "pch.h"는 무엇이며 왜 첫 번째 헤더 파일로 포함되어야 합니까? (0) | 2023.08.06 |
|---|---|
| 자바스크립트에서 정규식 리터럴을 연결하려면 어떻게 해야 합니까? (0) | 2023.08.06 |
| PHP 세션 변수 설정 취소 (0) | 2023.08.06 |
| onRequestPermissionsFragment와 작업 모두에 정의된 경우 fragment에서 호출되지 않는 결과 (0) | 2023.08.06 |
| Android가 프로세스를 죽이는 시뮬레이션 방법 (0) | 2023.08.06 |