从 Bash 中的目录获取文件名
Obtaining file names from directory in Bash
我正在尝试创建一个 zsh 脚本来测试我的项目。老师为我们提供了一些输入文件和预期的输出文件。我需要将 myExecutable 的输出文件与预期的输出文件进行区分。
问题:$iF
是否包含以下代码中的字符串或对文件的某种 bash 引用?
#!/bin/bash
inputFiles=~/project/tests/input/*
outputFiles=~/project/tests/output
for iF in $inputFiles
do
./myExecutable $iF > $outputFiles/$iF.out
done
注:
任何有助于实现我的目标的提示都会很好。我是 shell 脚本的新手,我正在使用以下网站快速编写脚本(因为我必须专注于项目开发而不是在额外的东西上浪费时间):
正如您的代码,$iF
包含文件的完整路径作为字符串。
N.B:不要使用for iF in $inputFiles
改用for iF in ~/project/tests/input/*
。否则,如果路径包含空格或换行符,您的代码将失败。
如果您需要比较文件,您可以对输出文件执行另一个 for 循环。使用 basename 命令只获取文件名,然后将它们放在 diff 中,并使用“>”运算符重定向标准输出到“.diff”文件。
然后将每个文件与预期的文件进行比较,例如:
expectedOutput=~/<some path here>
diffFiles=~/<some path>
for oF in ~/project/tests/output/* ; do
file=`basename ${oF}`
diff $oF "${expectedOutput}/${file}" > "${diffFiles}/${file}.diff"
done
我正在尝试创建一个 zsh 脚本来测试我的项目。老师为我们提供了一些输入文件和预期的输出文件。我需要将 myExecutable 的输出文件与预期的输出文件进行区分。
问题:$iF
是否包含以下代码中的字符串或对文件的某种 bash 引用?
#!/bin/bash
inputFiles=~/project/tests/input/*
outputFiles=~/project/tests/output
for iF in $inputFiles
do
./myExecutable $iF > $outputFiles/$iF.out
done
注:
任何有助于实现我的目标的提示都会很好。我是 shell 脚本的新手,我正在使用以下网站快速编写脚本(因为我必须专注于项目开发而不是在额外的东西上浪费时间):
正如您的代码,$iF
包含文件的完整路径作为字符串。
N.B:不要使用for iF in $inputFiles
改用for iF in ~/project/tests/input/*
。否则,如果路径包含空格或换行符,您的代码将失败。
如果您需要比较文件,您可以对输出文件执行另一个 for 循环。使用 basename 命令只获取文件名,然后将它们放在 diff 中,并使用“>”运算符重定向标准输出到“.diff”文件。
然后将每个文件与预期的文件进行比较,例如:
expectedOutput=~/<some path here>
diffFiles=~/<some path>
for oF in ~/project/tests/output/* ; do
file=`basename ${oF}`
diff $oF "${expectedOutput}/${file}" > "${diffFiles}/${file}.diff"
done