Выборочно создавайте папки на основе имен в скрипте bash

#bash #loops #for-loop #ubuntu-20.04

Вопрос:

У меня есть несколько файлов, которые называются следующим образом:

 dosulepin3D_CID_5284550.pdbqt
protriptyline3D_CID_4976.pdbqt

 

Это маленькие молекулы. Теперь я хочу создать файл в Results папке для каждой из этих молекул, игнорируя 3D_CID_5284550.pdbqt все, что у них есть, и иметь папки под названием:

 dosulepin
protriptyline
 

Я хочу сделать это с помощью цикла for, так как я также выполняю некоторые функции с этими файлами. Это то, что у меня есть:

 DIR="/home/roy/MolecularDocking/VirtualScreening/Dockings"
cd $DIR
for ligand in ligands/*; do
    echo $ligand
    mkdir "/home/roy/MolecularDocking/Results/$ligand"
done;
 

Но это, очевидно, создает папки с полным именем.

Ответ №1:

Что-то вроде этого.

 DIR="/home/roy/MolecularDocking/VirtualScreening/Dockings"
cd "$DIR" || exit

for ligand in ligands/*.pdbqt; do
    echo "$ligand"
    echo mkdir -p "/home/roy/MolecularDocking/Results/${ligand=*}"
done
 

Удалите echo из mkdir , если вы удовлетворены результатом.

Дополнительные сведения см. в разделе Расширение параметров.

Комментарии:

1. Спасибо @Jetchisel. Это дает мне /home/roy/MolecularDocking/Results/ligands/viloxazine . Есть ли способ просто получить /home/roy/MolecularDocking/Results/viloxazine

2. Вам нужно будет выполнить еще одно расширение параметров. ligands=${ligand=*}; ligand=${ligand/ligands} может быть. Это ; может быть новая строка.