GNU Parallel을 사용하여 파일 복사 및 이름 바꾸기

GNU Parallel을 사용하여 파일 복사 및 이름 바꾸기

files.lst파일 이름 목록을 기반으로 파일을 복사하고 이름을 바꾸려는 간단한 스크립트가 있습니다.names.lst

**name.lst**
100GV200.vcf
150GV200.vcf
14300GV200.vcf

**file.lst**
file1.txt
file2.txt
file3.txt

지금까지 내 스크립트는 다음과 같습니다.

parallel --link -k "cp {} {}" :::: file.lst :::: name.lst

불행하게도 나는 돌아왔다:

 cp: target `100GV200.vcf` is not a directory

cp터미널에서 단일 명령을 실행하면 제대로 작동합니다.

cp file1.txt 100GV200.vcf

GNU 병렬 처리가 인수를 읽는 방법을 이해하는 데 내가 어디에서 잘못되었습니까?

답변1

특수 문자 없이 사용할 수 있는 파일 이름에 대해 Parallel의 혼란스러운 인터페이스를 사용하지 마세요.

paste file.lst name.lst | xargs -n2 echo mv

답변2

{1} 및 {2} 표기법을 사용합니다.

parallel --link -k cp {1} {2} :::: file.lst :::: name.lst

나를 위해 일했고 따옴표와도 작동합니다

parallel --link -k "cp {1} {2}" :::: file.lst :::: name.lst

{}와 함께 작동하게 하려면 다음과 같이 해야 합니다.

parallel --link -k "cp {}" :::: file.lst :::: name.lst

병렬은 두 파일의 줄을 자동으로 추가하기 때문입니다.

답변3

동일한 효과를 얻으려면 다음 명령을 사용합니다.

paste file.lst name.lst|  awk '{print "cp" " " $1 " " $2}'|sh

관련 정보