Bash 多次执行输入文件具有不同扩展名的命令

Bash 多次执行输入文件具有不同扩展名的命令,bash,modularity,Bash,Modularity,我试着用矩阵的方法计算一些有向模估计。我必须使用命令/community*.bin-l-1-w*.weights>*.tree,它接受两种不同类型的输入文件(*.bin和*.weights)并生成*.tree文件。我希望它能够运行1000个*.bin文件和1000个*.weights文件,这些文件都存储在一个文件夹中。根据@KamilCuk之前的推荐,我尝试了以下方法,但没有成功: find -type f -name *.bin -o -name *.weights | while IFS=

我试着用矩阵的方法计算一些有向模估计。我必须使用命令
/community*.bin-l-1-w*.weights>*.tree
,它接受两种不同类型的输入文件(*.bin和*.weights)并生成*.tree文件。我希望它能够运行1000个*.bin文件和1000个*.weights文件,这些文件都存储在一个文件夹中。根据@KamilCuk之前的推荐,我尝试了以下方法,但没有成功:

find -type f -name *.bin -o -name *.weights | 
while IFS= read -r file; do
   file_no_extension=${file##*/};
   file_no_extension=${file_no_extension%%.*}
   ./community "$file.bin" -l -1 -w "$file.weights" > "$file_no_extension".tree
done

有什么建议吗?

如果扩展名为
.bin
的所有文件都有相应的
.weights
文件,那么您可能应该这样做:

#!/bin/bash

find -type f -iname '*.bin' |
while IFS= read -r binfile; do
    file_no_extension=${binfile%%.bin}

    weightsfile="$file_no_extension".weights
    treefile="$file_no_extension".tree

    ./community "$binfile" -l -1 -w "$weightsfile" > "$treefile"
done

这将把
.tree
文件与
.bin
.weights
文件放在同一个目录中。

如果扩展名为
.bin
的所有文件都有相应的
.weights
文件,您可能应该这样做:

#!/bin/bash

find -type f -iname '*.bin' |
while IFS= read -r binfile; do
    file_no_extension=${binfile%%.bin}

    weightsfile="$file_no_extension".weights
    treefile="$file_no_extension".tree

    ./community "$binfile" -l -1 -w "$weightsfile" > "$treefile"
done

这将把
.tree
文件放在与
.bin
.weights
文件相同的目录中。

如果文件名与
*.bin
匹配,则需要为其添加一个测试。然后将与
*.weights
相同的变量分配给另一个变量,因此,您的
社区
命令将是直截了当的,这与您的上一个问题有何不同@我对bash编程一无所知。你的意思是像
find-typef-name'*.bin'-o-name'*.weights'|而IFS=read-r file;do file_bin=${file##*bin};file#weights=${file##*weights};file\u no\u extension=${file\u no\u extension%%.*}./community“$file.bin”-l-1-w“$file.weights”>“$file\u no\u extension”。tree done
@shashasha我添加了它作为可能的答案。注释中的代码很难读懂。@MarkSetchell我已经澄清了这一点,以便更精确。如果文件名与
*。bin
匹配,则需要为该文件名添加一个测试,然后分配给一个变量,该变量与
*。weights
相同,但使用不同的名称变量,因此,您的
社区
命令将是直截了当的,这与您的上一个问题有何不同@我对bash编程一无所知。你的意思是像
find-typef-name'*.bin'-o-name'*.weights'|而IFS=read-r file;do file_bin=${file##*bin};file#weights=${file##*weights};file\u no\u extension=${file\u no\u extension%%.*}./community“$file.bin”-l-1-w“$file.weights”>“$file\u no\u extension”。tree done
@shashasha我添加了它作为可能的答案。注释中的代码很难读懂。@MarkSetchell我已经澄清了,更精确一些。这就成功了@沙沙太棒了!:-)这就成功了@沙沙太棒了!:-)