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