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我已经澄清了,更精确一些。这就成功了@沙沙太棒了!:-)这就成功了@沙沙太棒了!:-)