如何使用具有 .xyz 扩展名的特定文件执行 .sh

如何使用具有 .xyz 扩展名的特定文件执行 .sh

我有abc.sh文件和输入源(input.xyz)。

我总是abc.sh使用输入源执行文件(例如我输入sh abc.sh input.xyz)但是,随着目录数量的增加,我懒得输入输入文件名。

如何将进程植入到abc.sh文件中执行而不是键入命令( sh abc.sh input.xyz)?

目前的脚本是这样的

INPUT=$1                            

n="1"                               
numb=$(sed -n "$n"p $1)             
#echo $numb
dummy="NULL"

谢谢你的评论,这是我的错误。当我运行脚本时我输入

sh abc.sh 000.xyz      

每次我跑步时000.xyz都会有不同的数字,所以.xyz只是固定的。

答案1

可以使用 bash 循环遍历目录中所有可能的输入文件(例如 001.xyz、002.xyz 等)。将其放入单独的 BASH 脚本来组织您正在运行的内容可能会更容易(例如batch_run.sh)。

例如,您可以使用循环for遍历当前目录中的每个 xyz 文件并abc.sh在其上运行脚本:

for input_file in *.xyz
do
    sh abc.sh $input_file
done

您提到您可能有多个目录。您也可以扩展通配符 (*) 以考虑目录(相对于您当前的位置):

for input_file in */*.xyz
do
    sh abc.sh $input_file
done

如果您的脚本必须在与输入文件相同的目录中运行,您还可以cd在循环中执行各种操作(例如),例如:

# remember the original directory before the for loop
original_directory = $(pwd)

# loop through all valid directories containing xyz files
for input_file in */*.xyz
do
    # enter the directory of containing the xyz file
    cd $(dirname $input_file)

    # run the script on the xyz file
    sh abc.sh $(basename $input_file)

    # return to the original directory
    cd ${original_directory}
done

它可能会变得或多或少复杂,具体取决于您想要执行的操作和您的规范,但是我希望这能让您了解 BASHfor循环如何允许您自动重复命令。

相关内容