2015-06-08 7 views
0
find . -maxdepth 1 ! -path . -type f ! -name "*.gz" ${FILE_PATTERN} -mtime +${DAYS_AFTER_ARCHIVE} 

Я пытаюсь выполнить вышеуказанную команду внутри сценария, где ${FILE_PATTERN} и ${DAYS_AFTER_ARCHIVE} являются переменной при условии, во время выполнения сценария. Значение переменной для ${FILE_PATTERN} будет ! -name "*warnings*". Ищу для выполнения выше команды, как, как показано ниже команды в сценариикоманда линукс находка не принимает должного аргумента

find . -maxdepth 1 ! -path . -type d ! -name "*warnings*" -mtime +7 

я обеспечиваю шаблон файла аргумент как «! -name» предупреждения «» , но получая следующее сообщение об ошибке

find: paths must precede expression 
Usage: find [-H] [-L] [-P] [path...] [expression] 

предлагайте выше.

ответ

0

Прежде всего

-name "*.gz" ${FILE_PATTERN} 

имеет слишком много значений параметров (это то, что обычно вызывает сообщение, показанное)

Если вы используете Баш или аналогичный, спасаясь от восклицательных знаков

find . -maxdepth 1 \! -path . -type f \! -name "*.gz" ${FILE_PATTERN} -mtime +${DAYS_AFTER_ARCHIVE} 

Я предоставляю аргумент файла шаблона в качестве предупреждений «! -name», но получает следующее сообщение об ошибке

Вы не можете комбинировать флаги и их значения. Кроме того, вы не можете вложить ". Таким образом, это может быть как

! -name "$FILE_PATTERN" 
0

Если вы используете BASH вы можете использовать Баш массивы:

# find options 
FILE_PATTERN=(! -name "warnings*") 

# build the find command 
cmd=(find . -maxdepth 1 ! -path . -type f \(! -name "*.gz" "${FILE_PATTERN[@}}" \) -mtime +${DAYS_AFTER_ARCHIVE}) 

# execute the command 
"${cmd[@]}" 

Если вы не используете BASH, то вы должны использования eval с осторожностью:

FILE_PATTERN='! -name "warnings*"' 
eval find . -maxdepth 1 ! -path . -type f ! -name "*.gz" "${FILE_PATTERN}" -mtime +${DAYS_AFTER_ARCHIVE} 
Смежные вопросы