[英]Using variable Names in For Loop (Bash)
我有兩組目錄。 在第一個目錄中,我有8個文件,例如:
file1.txt file2.txt file3.txt ... file8.txt
在第二個名為output
目錄中,我有多個子目錄。 我想寫一個for循環,該循環進入output
內部的每個子目錄(因此它們是directory1
, directory2
等...),並讀取一個名為database_file_#.txt
的文件。 目前,我已在下面編寫了此循環,但一次僅適用於一個目錄。
for file in *; do
name="${file%%.*}"
python script.py --parameter $file --out ../../output/directory1/${cts_name}
--readin ../../output/directory1/database_file_1.txt
done
對於第二個目錄,我執行以下操作:
for file in *; do
name="${file%%.*}"
python script.py --parameter $file --out ../../output/directory1/${cts_name}
--readin ../../output/directory2/database_file_2.txt
done
我不想繼續為輸出中的所有目錄重寫目錄號。 有沒有辦法可以使用變量呢?
for i in 1 2 3 4 5 6 7 8; do
for file in *; do
name="${file%%.*}"
python script.py --parameter "$file" --out ../../output/directory"${i}/${cts_name}" \
--readin "../../output/directory${i}/database_file_${i}.txt"
done
done
聽起來這里的關鍵變量是“#”,而不是“文件”。
建議:
for i in 1 2 3 4 5 6 7 8; do
filename=file$i.txt
outdir=../../output/directory$i
python script.py --parameter $filename --out $outdir/${cts_name} --readin $outdir/database_file_$i.txt
done
PS:假設輸入文件和#之間存在1 :: 1的關系。
否則,如果每個#都有N個文件,則需要一個嵌套循環。
在任何情況下,請使其盡可能簡單( KISS )。
首次嘗試時,您可以嘗試以下操作(但請繼續閱讀):
for f in $(ls -R); do
if [[ $f =~ database_file_+([0-9])\.txt ]]; then
python script.py ... --readin "$f"
fi
done
+([0-9])
匹配一個或多個數字
感謝Charles Duffy的評論,此代碼段更加准確:
find . -type f -regex ".*/database_file_[0-9]+\.txt$" -exec python script.py ... --readin {} \;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.