1

Я хочу выполнить следующую команду.

находить . -mtime -60s

Когда я делаю, я получаю этот вывод вместо:

CLIENT% echo `date +%s`-1308741881 | bc
5152
CLIENT% find . -mtime -`echo `date +%s`-1308741881 | bc`s
-1308741881: Command not found.
find: -mtime: -date: illegal time value
CLIENT%

Что тут происходит?

1 ответ1

6

Проблема в том, что `знаки используются для обозначения команд, вывод которых должен быть подставлен в вашу команду ... так что ваша команда на самом деле состоит из трех команд:

  1. "эхо" (содержится в первом наборе из 1 метки)
  2. «-1308741881 | bc» (содержится во втором наборе из 1 знака)
  3. находить . -mtime - ВЫХОД ИЗ КОМАНДЫ № 1 дата +% s ВЫХОД ИЗ КОМАНДЫ № 2

Команда # 1 ничего не выводит, а команда # 2 приводит к ошибке "Команда не найдена", поскольку -1308741881 не является допустимой командой, а затем ничего не выводит.

Затем, наконец, запускается третья команда с этими заменами и выглядит так:

find . -mtime -date

А поскольку «-дата» не является действительным временем, она также жалуется на это, говоря "недопустимое значение времени"

Основная проблема заключается в том, что вы пытаетесь использовать вложенные метки ``, которые оболочка интерпретирует как две отдельные команды.

Лучший способ выразить то, что вы хотите, это (для bash):

find . -mtime -$(echo $(date +%s-1308741881) | bc)s

И для csh:

set now=`date +%s-1308741881`; set date=`echo $now | bc`s; find . -mtime -$date

И, возможно, для других оболочек (не проверено):

NOW=`date +%s-1308741881`; DATE=`echo $NOW | bc`; find . -mtime -${DATE}s

PS Я не думаю, что это делает то, что вы ожидаете ... ваша команда date возвращает количество секунд, но -mtime ожидает ввода количества дней. Я предполагаю, что вы, вероятно, захотите изменить свою команду даты соответственно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .