我有两组目录。在第一个目录中,我有8个这样的文件:
file1.txt file2.txt file3.txt ... file8.txt
在第二个目录output
中,我有多个子目录。我想编写一个output
内每个子目录中的for循环(因此它们是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
我不想继续为输出中的所有目录重写目录号。有没有办法我可以使用变量?
答案 0 :(得分:1)
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
答案 1 :(得分:0)
听起来这里的关键变量是“#”,而不是“文件”。
建议:
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)。
答案 2 :(得分:0)
首次尝试时,您可以尝试以下操作(但请继续阅读):
for f in $(ls -R); do
if [[ $f =~ database_file_+([0-9])\.txt ]]; then
python script.py ... --readin "$f"
fi
done
+([0-9])
与一个或多个数字匹配的地方
感谢查尔斯·达菲的评论,此摘要更加准确:
find . -type f -regex ".*/database_file_[0-9]+\.txt$" -exec python script.py ... --readin {} \;