Bash列出特定文件后的文件

时间:2011-02-18 20:10:32

标签: bash shell ls

我想使用bash脚本在特定文件后面的目录中的所有文件上运行我的程序。

如果我有一个目录:

fileA
fileB
fileC
fileD

我想在./prog <file>之后为所有文件运行fileC。我如何编写一个bash脚本来执行此操作?

我目前有

for FILE in ./tests/*; do
  ./prog $FILE
  if [ $? -eq 0 ]; then
    echo "success: $FILE"
  else
    echo "**FAILURE: $FILE"
    exit 1
  fi
done

但是,我想从该目录中的特定文件开始。它不一定需要排序,因为ls列表文件按特定顺序每次都是相同的。

我通常只运行我的脚本,当它失败时,我会针对该特定文件修复它,但之后我想从该文件恢复,而不是从头开始重新启动。

2 个答案:

答案 0 :(得分:1)

如果文件已排序,那么您可以使用'<''>'运算符对两个变量进行逐字比较:

startfile=$1
for FILE in ./tests/*; do
    if ! [ "$FILE" '<' "$startfile" ] ; then
        echo doing something with $FILE
    else
        echo Skipping $FILE
    fi
done

答案 1 :(得分:0)

for file in `ls tests | grep -A 999999 "^tests/startfile$" | tail -n +2`
do
  whatever
done

grep -A 999999列出了tests / startfile(^和$以避免部分匹配)和999999下一个条目。

tail -n +2列出从第2行(从1开始)

开始的所有内容