tar
정말 빨리 당신을 위해 이것을 할 것입니다.
테스트
먼저 2 개의 디렉토리와 10 개의 파일을 만들었습니다.
% mkdir test1 test2 ; cd test1
% for n in `seq 1 10` ; do touch ABC.file$n ; done
% ls
> ABC.file1 ABC.file2 ABC.file4 ABC.file6 ABC.file8
> ABC.file10 ABC.file3 ABC.file5 ABC.file7 ABC.file9
그런 다음 복사했습니다.
% tar -cf - ./* |\
tar -C../test2 --transform='s/ABC/DEF/' -xf -
% ls ../test2
> DEF.file1 DEF.file2 DEF.file4 DEF.file6 DEF.file8
> DEF.file10 DEF.file3 DEF.file5 DEF.file7 DEF.file9
변환
따라서 GNU tar
는 sed --transform=EXPRESSION
파일 이름 바꾸기를 허용합니다 . 파일의 일부만 이름을 바꿀 수도 있습니다. 예를 들어 :
% tar -cf - ./* |\
tar -C../test2 --transform='s/ABC\(.*[0-5]\)/DEF\1/' -xf -
% ls ../test2
> ABC.file6 ABC.file8 DEF.file1 DEF.file2 DEF.file4
> ABC.file7 ABC.file9 DEF.file10 DEF.file3 DEF.file5
이것이 한 가지 장점입니다.
흐름
또한이 tar
프로세스 는 두 개의 프로세스에 불과 하며 파일 수에 관계없이 변경되지 않습니다.
tar | tar
tar
당신이 원하는만큼 최적화되어 있습니다. 이것은 문제 인수 수 또는 폭주 하위 프로세스를 갖지 않습니다. 이것은 단지 A> B 입니다.
인수
나는 두 tar
프로세스 사이에 7 개의 구별 된 인수를 사용한다 . 가장 중요한 것이 먼저 여기에 나열됩니다.
-
표준 출력 / 표준 입력 -이 정보 용 tar
그것으로 하나의 입력 또는 출력을 스트리밍한다으로부터 또는 stdin/stdout
어느 올바르게은 건물 또는 아카이브 추출되어 있는지의 여부에 따라 해석된다.
-c
생성 -이 이야기 tar
아카이브를 구축 할 수 있습니다. 다음 주장 tar
은 ...
-f
파일 - 테이프 장치 등이 아닌 객체 tar
로 작업하도록 지정합니다 file
. 그리고 위에서 언급했듯이 작업 할 파일은 stdin/stdout
다시 말해 우리의 파일 |pipe
입니다.
./*
모든 $ PWD / 파일 - 너무 많은 아카이브 인수가 있으므로, 먼저 것을 제외하고 여기에 설명하지 -
다음 ./*
.
... 그리고 반대편에 |pipe
...
-C
디렉토리 변경 - tar
다른 조치를 수행하기 전에 내가 지정한 디렉토리로 변경해야하므로 효과적으로 cd ../test2
추출하기 직전에 변경 해야합니다.
--transform='s/ed/EXPR/'
-이미 언급했듯이 이름을 바꿨습니다. 그러나 문서는 모든 sed
표현을 취할 수 있음을 나타냅니다 //flag
.
-x
extract-tar
대상 디렉토리로 변경 한 후 이름 바꾸기 지시 사항을 수신하면 -f - |pipe
아카이브 파일 에서 현재 디렉토리로 모든 파일의 추출을 시작하도록 지시 합니다. 미스터리가 없습니다.
mc
파일 관리자는 이러한 종류의 대량 이름 바꾸기를 가장 광범위하게 지원합니다.