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

並列は、2つのファイルの行を自動的に追加するためです。

答え3

同じ効果を得るには、次のコマンドを使用します。

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

関連情報