파일을 해당 디렉터리에 복사하세요.

파일을 해당 디렉터리에 복사하세요.

동일한 이름 형식(영숫자 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

관련 정보