이름이 다른 파일을 복사하여 붙여 넣기


10

이름이 많은 텍스트 파일이 있습니다.

foo_bar_abc_1_01_geh_original.in
foo_bar_abc_1_02_geh_original.in
foo_bar_abc_1_03_geh_original.in
...
...
foo_bar_abc_1_1000_geh_original.in

각 파일 을 복사 (및 원본 파일 유지) 하고 같은 폴더에 다른 이름으로 붙여 넣기 를 원합니다 .

foo_bar_abc_1_01_geh_copy.in
foo_bar_abc_1_02_geh_copy.in
foo_bar_abc_1_03_geh_copy.in
...
...
foo_bar_abc_1_1000_geh_copy.in

간단한 스크립트를 사용하여 어떻게 할 수 있습니까?

답변:


13

원본 파일이있는 위치로 디렉토리를 변경하십시오.

그런 다음 다음 명령 줄을 사용하여 테스트하십시오.

for i in *_original.*;do echo cp -p "$i" "${i/_original./_copy.}";done

보기 좋으면 echo복사를 제거 하고 수행하십시오.

for i in *_original.*;do cp -p "$i" "${i/_original./_copy.}";done

8

당신은 사용할 수 있습니다 mcp으로부터 mmv패키지mmv 설치 다음과 같은 방법으로 :

mcp "*original*" "#1copy#2"

현재 디렉토리에 "original"이라는 문자열이 포함 된 모든 파일을 복사하고이 문자열을 "copy"로 바꿉니다. 플래그 mcp를 추가하여 수행 할 작업을 테스트 할 수 -n있지만 파일을 자동으로 덮어 쓰지는 않지만 요청합니다. 를 사용하면 모든 단일 파일에 대해 호출 할 필요가 없다는 mmv장점 cp이 있습니다. 복사하는 것처럼 1000 개의 파일이 있으면 차이가 있습니다.

다음과 같은 방법으로 GNUparallel 병렬 설치 를 사용할 수도 있습니다 ( --dry-run테스트 용, 복사를 수행하여 제거하여 복사).

parallel --dry-run cp -p "{}" "{=s/original/copy/=}" ::: *

또는 "인수 목록이 너무 깁니다"오류가 발생하는 경우 :

printf "%s\0" * | parallel --dry-run -0 cp -p "{}" "{=s/original/copy/=}"

예제 실행

$ ls -1
foo_bar_abc_1_01_geh_original.in
foo_bar_abc_1_02_geh_original.in
foo_bar_abc_1_03_geh_original.in
foo_bar_abc_1_04_geh_original.in
$ mcp "*original*" "#1copy#2"
$ ls -1
foo_bar_abc_1_01_geh_copy.in
foo_bar_abc_1_01_geh_original.in
foo_bar_abc_1_02_geh_copy.in
foo_bar_abc_1_02_geh_original.in
foo_bar_abc_1_03_geh_copy.in
foo_bar_abc_1_03_geh_original.in
foo_bar_abc_1_04_geh_copy.in
foo_bar_abc_1_04_geh_original.in

하자입니다 timeA의 100 킬로바이트 각각 1000 개 파일을 통해 실행, 그것을 느린 기계 :

$ time mcp "*original*" "#1copy#2"
real    0m1.114s
user    0m0.000s
sys     0m0.132s
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.