Функция, чтобы проверить, был ли файл изменен

uname -r можно использовать для определения точной версии ядра вашей ОС Linux. или вы можете использовать uname -a для получения всей информации о версии ядра.

-2
04.08.2018, 16:18
2 ответа

Ваша обновленная функция с исправленными кавычками при вызовеstat(кавычки выводились бы, и последующие проверки содержимого файла всегда не удавались из-за них):

changed() {
  echo "$1"
  if [ -f "$1_changed" ]; then
    if [ "$(stat -f "%Z")" != "$(<"$1_changed")" ]; then   # escaped quotes removed
      return 1
    else
      return 0
    fi
  else
    "$(stat -f "%Z" "$1")" > "$1_changed"      # note: error here
    return 1
  fi

}

Это может быть значительно сокращено до:

changed () {
  echo "$1"

  if [ ! -f "$1_changed" ]; then
    stat -f %Z "$1" >"$1_changed"
    return 1
  fi

  [ "$(stat -f %Z)" != "$(<"$1_changed")" ]
}

Здесь я также превратил подстановку команды, которая запускала бы вывод из statв прямой вызов stat, перенаправленный в выходной файл (, см. error hereпримечание в первой части кода ).

Я также изменил логику функции, чтобы не требовалось так много returnвызовов. Если returnотсутствует, статус выхода функции будет таким же, как у последнего оператора в функции.

Мы можем сделать это немного аккуратнее с помощью

changed () {
  echo "$1"

  local timestamp="$(stat -f %Z "$1")"

  if [ ! -f "$1_changed" ]; then
    printf '%s\n' "$timestamp" >"$1_changed"
    return 1
  fi

  [ "$timestamp" != "$(<"$1_changed")" ]
}

Позже вы можете вызвать эту функцию, используя

if changed "$filename"; then
    # do something, the file in "$filename" changed
fi

Обратите внимание, что ваш звонок,

if [ changed("plugins") -eq 1]; then

содержит несколько синтаксических ошибок.

1
28.01.2020, 05:16

Исключите четыре ошибки в

 if [ stat -f "%Z" != $(<"$_changed") ]; then

которые являются:

  • используйте "подстановку команд"$(...)
  • изменить stat -fна -cвариант
  • добавьте имя файла($1)дляstat(позже!)
  • используйте правильное имя файла с$1

уступка

 if [ $(stat -c "%Z" "$1") != $(<"$1_changed") ]; then 
0
28.01.2020, 05:16

Теги

Похожие вопросы