유닉스 계열

유닉스 계열

나는 아주 간단한 일을하려고 노력하고 있습니다. 모든 것을 삭제하고 템플릿 텍스트 파일의 내용으로 바꿔야 하는 40개의 텍스트 파일이 있습니다.

가장 쉽고 빠른 방법은 무엇입니까?

주의: 검색하고 바꾸는 것이 아니라 모든 것을 삭제한 다음 내부에 복사하고 싶습니다. 이는 파일을 여는 것과 같습니다. 각 파일에 대해 ctrl + A >> del >> ctrl + v

답변1

유닉스 계열

catUnix와 유사한 명령줄(Linux, OSX 등)에서 파일 내용을 STDOUT으로 인쇄하고 >STDOUT을 파일로 리디렉션하여 해당 내용을 덮어쓰는 데 사용할 수 있습니다 .

cat template.txt > file.txt

가장 쉬운 방법은 template.txt별도의 디렉터리에 넣는 것입니다. 그런 다음 for 루프를 사용하여 작업 디렉터리의 모든 *.txt에 영향을 줄 수 있습니다.

for f in ./*.txt; do cat /path/to/template.txt > "$f"; done

bash 4+를 사용하는 시스템(모든 최신 *nix에는 이 기능이 있을 가능성이 높습니다. 확인)에서는 확장 글로빙을 사용할 수 있으므로 덮어쓰려는 파일과 동일한 디렉터리에 bash --version있을 수 있습니다 .template.txt

shopt -s extglob
for f in ./!(*template).txt; do cat template.txt > "$f"; done

많은 하위 디렉터리에 텍스트 파일이 있는 경우(경고: 이 파일은 덮어쓰게 됩니다.모두 *.txt작업 디렉터리와 모든 하위 디렉터리 및 모든 하위 디렉터리에 있는 파일...), globstar를 사용할 수 있습니다.

shopt -s globstar
for f in ./**/*.txt; do cat /path/to/template.txt > "$f"; done

##  OR:
shopt -s globstar extglob
for f in ./**/!(*template).txt; do cat template.txt > "$f"; done

윈도우

구문은 다르지만 유사하게 작동합니다. 대신 다음을 cat사용하십시오 type.

type template.txt > file.txt

.txt디렉토리의 모든 작업을 수행하려면 다음을 수행하십시오 .

FOR %F IN (*.txt) DO type C:\path\to\template.txt > %F

재귀성을 위해서는 다음을 사용하십시오 /R.

FOR /R %F IN (*.txt) DO type C:\path\to\template.txt > %F

답변2

음, 원하는 것은 자동화된 검색 및 교체(powergrep이 수행하는 것과 유사하지만 무료)로 수행할 수 있지만 템플릿을 가져와 각각의 새 파일로 복사하는 것이 더 쉽습니다. 이 작업은 명령줄에서 수행할 수 있습니다.

해당 템플릿을 넣으려는 모든 파일 이름 목록이 포함된 파일을 만듭니다.

따라서 listoffiles.txt의 내용은 다음과 같습니다.

파일1.txt
파일2.txt
파일3.txt

그런 다음 cmd 프롬프트를 열고 다음을 수행하십시오.

C:\fdf>for /f %f in (listoffiles.txt) do @echo copy template.txt %f

template.txt 파일1.txt
복사 template.txt 파일2.txt
template.txt 파일3.txt 복사

C:\fdf>

@echo copy template.txt 줄을 변경하여 copy template.txt를 읽으세요. 즉, @echo를 제거하거나 에코만 제거합니다.

c:\fdf에는 listoffiles.txt가 필요하고 거기에도 template.txt가 필요합니다. 그리고 file1.txt file2.txt 등이 생성됩니다.

관련 정보