ファイル名を使用した変数の命名

ファイル名を使用した変数の命名

名前はPocket_???_????_?.pdb_OUTPUT.txt????_?形式でディレクトリが ????_????形式のファイルがあります。一部をコピーする必要があります。たとえば、ファイルのリストがあり、このファイルを最終ディレクトリにのみコピーしたいとします。

たとえば、

file.txt:

Pocket_001_1b47_A.pdb_OUTPUT.txt
Pocket_002_1b47_A.pdb_OUTPUT.txt
Pocket_001_2cl5_B.pdb_OUTPUT.txt
Pocket_001_4rtl_A.pdb_OUTPUT.txt

これらのファイルはそれぞれ独自のディレクトリ(1b47_A、、2cl5_Bおよび4rt1_A)にあり、各ディレクトリに移動して別の宛先にコピーしたいと思います。問題は、ファイル名に基づいてディレクトリを表示する方法がわからないことです。

このスクリプトを試してみましたが、うまくいきますが、人が多いため、すべてのディレクトリを処理するのに時間がかかります。

for dir in ????_?; 
    do cd $dir/; 
       while read file; 
       do cp $file /home/tommaso/cp_file/; done < /home/tommaso/file.txt ; 
    cd .. ; cd .. ; done

ファイル名に含まれるディレクトリからのみファイルを検索するようにスクリプトに指示したいと思います。どうすればいいですか?

ベストアンサー1

これはオプションです。

while IFS= read -r file; do 
  dir="${file%%.*}"
  cp "${dir#*_*_}/$file" /home/tommaso/cp_file/
done < file.txt

おすすめ記事