名前は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
答え2
とを一緒に使用して印刷できますawk
。directory/filename
xargs
cp -t DIRECTORY SOURCE...
awk -F"[_.]" '{printf "%s_%s/%s\n",$3,$4,$0}' file.txt \
| xargs -d '\n' cp -t /home/tommaso/cp_file/