[英]Loop over directories one level deep and execute script with directory name as argument in bash in that directory
我有一個批處理腳本,我想用它在特定級別的所有目錄上運行。 它調用一個腳本( recon1.sh ),該腳本將目錄名稱作為參數並將結果文件夾存儲在每個子目錄中。 我想要的是,當從命令行( bash batch_recon1.sh 路徑_X )指定路徑名稱時,它cd進入每個蛋白質文件夾(蛋白質_A,蛋白質_B,...。蛋白質_Z)並執行 recon1.sh 並對所有蛋白質執行此操作路徑文件夾。 目前,它在一種蛋白質(蛋白質_A)沒有為蛋白質_B和其他蛋白質開始之后結束。 我怎樣才能解決這個問題? 我嘗試使用更簡單的腳本,該腳本僅在子文件夾上循環一層,並將該目錄中的 file_names 寫入文本文件,效果很好,但由於某種原因,此代碼(batch_recon1.sh for recon1.sh)不起作用. 有人可以幫忙嗎?
文件夾結構:
[軟件文件夾]
${HOME}/ProjName/software/batch_recon1.sh
${HOME}/ProjName/software/recon1.sh
[項目文件夾]
${HOME}/ProjName/pathways/Pathway_X/protein_A/
${HOME}/ProjName/pathways/Pathway_X/protein_A/protein_A_id
${HOME}/ProjName/pathways/Pathway_X/protein_A/protein_A_searchRes
${HOME}/ProjName/pathways/Pathway_X/protein_A/protein_A_alignment
${HOME}/ProjName/pathways/Pathway_X/protein_B/
${HOME}/ProjName/pathways/Pathway_X/protein_B/protein_B_id
${HOME}/ProjName/pathways/Pathway_X/protein_B/protein_B_searchRes
${HOME}/ProjName/pathways/Pathway_X/protein_B/protein_B_alignment
recon1.sh 將 protein_name 作為 arg(例如 recon1.sh protein_A)
所以 ${dirname} 應該是(即)“protein_A”而不是蛋白質文件夾的完整路徑。
用作(從命令行) bash batch_recon1.sh Pathway_X
batch_recon1.sh的代碼:
#!/bin/bash
# -*- coding: utf-8 -*-
set -e
current_path=$(pwd)
pathway_name=$1
path_to_folder=${HOME}/ProjName/pathways/${pathway_name}
path_to_software_folder=${HOME}/ProjName/software
cd ${path_to_folder}
echo '----running batch_reconcile1.sh on pathway:'$@
for fol in "${path_to_folder}"/*/; do
[ -d "${fol}" ] || continue ## if not a directory skip
dirname="$(basename "${fol}")"
(cd "${fol}" && bash ${path_to_software_folder}/recon1.sh ${dirname} )
cd ..
done
該腳本可能會提前退出,因為recon1.sh
失敗,並且您set -e
(如果命令失敗則退出)。
它可能由於cd..
不應該存在而失敗。
繼續嘗試所有蛋白質上的recon1.sh
可能會更好,即使其中一個失敗(這取決於您)。
代替
(cd "${fol}" && bash ${path_to_software_folder}/recon1.sh ${dirname} )
cd ..
和:
cd "${fol}" || continue
bash ${path_to_software_folder}/recon1.sh "${dirname}" || echo "recon1.sh failed for ${dirname}" >&2
工作目錄設置正確。 如果recon1.sh
由於任何原因仍然失敗,則會打印錯誤,但腳本不會退出,並嘗試下一個蛋白質。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.