这是我遇到的错误
+ find /data/ing/ur/test -type f -iname -mtime '\+14' -exec mv '{}' /dm/Removed/$Removed_files ';'
find: paths must precede expression: \+14
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
我的.sh代码
export Removed_files=rmvfolder
export _searchStr="abc_*"
export _input_date='-mtime \+14'
mkdir -m777 /dm/Removed/$Removed_files
find /data/ing/ur/test -type f -iname $_searchSt $_input_date -exec mv {} /dm/Removed/$Removed_files \;
答案 0 :(得分:0)
您搞砸了Shell的通配符扩展,该扩展会将扩展扩展到给定文件夹中的所有匹配文件名,从而一次传递多个文件名以搜索find
。除此之外,我认为您正在滥用export
指令(不是吗?)。您应该按如下所示修改代码:
Removed_files=rmvfolder
_searchStr='abc_*' # Single quotes are needed here to prevent bash from expanding the wildcard!
_input_date='-mtime +14'
mkdir -m777 /dm/Removed/${Removed_files}
find /data/ing/ur/test -type f -iname ${_searchStr} ${_input_date} -exec mv {} /dm/Removed/${Removed_files} \;
或者,您可以转义星号; _searchStr=abc_\*
答案 1 :(得分:0)
您要查找文件以匹配名称(不区分大小写)字符串-mtime
的文件,然后将字符串\+14
传递为find解释为路径的参数。它告诉您必须首先给出路径。问题是_searchSt
未设置。 (您之前设置了一个名为_searchStr
的变量,因此大概是错字。)
请注意,如果使用双引号并写成find /data/ing/ur/test -type f -iname "$_searchSt" $_input_date ...
,将可以避免此问题。这是关于最佳实践的争论点:您不能在双引号$_input_date
,因为您在此依赖字段拆分。最佳实践可能是避免依赖字段拆分,并使用仅包含要使用的参数的变量显式编写-mtime
。那是; find "$path" -type f -iname "$searchStr" -mtime "$_input_date" ...
您还可以通过使用${..?}
构造并编写find "${path?}" -type f -iname "${searchSt?}" ...
来防止此类错误(滥用变量名)。