#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}
может быть. Это;
может быть новая строка.