繁体   English   中英

linux find命令未采用适当的参数

[英]linux find command is not taking proper argument

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

我试图在脚本中执行以上命令,其中${FILE_PATTERN}${DAYS_AFTER_ARCHIVE}是执行脚本时提供的变量。 ${FILE_PATTERN}的变量值为! -name "*warnings*" ! -name "*warnings*" 我正在寻找像脚本中的以下命令一样执行上述命令

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

我提供文件模式参数为“!-name” warnings “”,但收到以下错误消息

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

在上面建议。

首先

-name "*.gz" ${FILE_PATTERN}

选项值太多(通常会导致显示此消息)

如果您使用bash或类似工具,请避免出现感叹号

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

我提供的文件模式参数为“!-name“ warnings””,但收到以下错误消息

您不能像这样组合标志及其值。 另外,您不能像这样嵌套"

 ! -name "$FILE_PATTERN"

如果您正在使用BASH,则可以使用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} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM