同じ名前の形式(英数字4文字と数字)を持つファイルがたくさんありますが、その.pdb
ディレクトリにコピーしたいと思います。
たとえば、ディレクトリにhome/Desktop/chain/file
次のファイルがあります。
1b47_biounit1.pdb
1ca9_biounit1.pdb
1ca9_biounit2.pdb
1ca9_biounit3.pdb
5tr6_biounit9.pdb
home/Desktop/chain
今;以下に多くのディレクトリを作成しました。ディレクトリ名は次のとおりです。
1b47_A
1b47_B
1ca9_A
5tr6_2
ファイルディレクトリのファイルを同じベース名のディレクトリにコピーしたいと思います。結果は次のとおりです。
1b47_A -> 1b47_biounit1.pdb
1b47_B -> 1b47_biounit1.pdb
1ca9_a -> 1ca9_biounit1.pdb 1ca9_biounit2.pdb 1ca9_biounit3.pdb
5tr6_2 -> 5tr6_biounit9.pdb
プログラミング言語に慣れていませんが、次のコードを試してみました。
cd home/Desktop/chain/file
for name in ./*.pdb; do
for dir in "${name%.pdb}"*/; do
cp "$name" "$dir"
done
done
しかし、私は望ましくない他の結果を得ます。誰でも私を助けることができますか?
私はスクリプトを使用し、ファイルやディレクトリがたくさんあるので、手動でこれを行いません。
ベストアンサー1
お役に立てば幸いです。
cd home/Desktop/chain/file
for name in $(find . -type d -depth 1 | xargs -I {} basename {} | cut -c-4 | uniq); do
for dir in $(find . -type d -depth 1 -name "$name*"); do
cp $name*.pdb $dir
done
done