Bash List Files после определенного файла - PullRequest
0 голосов
/ 18 февраля 2011

Я хочу запустить свою программу для всех файлов в каталоге после определенного файла, используя скрипт 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 ]

1 голос
/ 18 февраля 2011

Если файлы отсортированы, то вы можете использовать операторы '<' и '>' для сравнения двух переменных:

startfile=$1
for FILE in ./tests/*; do
    if ! [ "$FILE" '<' "$startfile" ] ; then
        echo doing something with $FILE
    else
        echo Skipping $FILE
    fi
done
0 голосов
/ 18 февраля 2011
for file in `ls tests | grep -A 999999 "^tests/startfile$" | tail -n +2`
do
  whatever
done

grep -A 999999 перечисляет тесты / стартовый файл (^ и $, чтобы избежать частичного совпадения) и следующие записи 999999.

tail -n +2 перечисляет все, начиная со строки 2 (на основе 1)

...