ファイルを適切なディレクトリにコピーします。

ファイルを適切なディレクトリにコピーします。

同じ名前の形式(英数字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

おすすめ記事