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