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.
-xextract-tar 대상 디렉토리로 변경 한 후 이름 바꾸기 지시 사항을 수신하면 -f - |pipe아카이브 파일 에서 현재 디렉토리로 모든 파일의 추출을 시작하도록 지시 합니다. 미스터리가 없습니다.
mc파일 관리자는 이러한 종류의 대량 이름 바꾸기를 가장 광범위하게 지원합니다.