我有一个复制某些文件的bash脚本,但它似乎没有正常工作。另请注意,源目录中没有匹配的文件。但该脚本的目的是复制文件如果有要复制的文件。
我尝试做的基本片段:
source_loc=/u01
target_log=/u02
/usr/bin/cp "$source_loc"/dir/*file* "$target_loc"/dir/
结果
Usage: cp [-fhipHILPU][-d|-e] [-r|-R] [-E{force|ignore|warn}] [--] src target
or: cp [-fhipHILPU] [-d|-e] [-r|-R] [-E{force|ignore|warn}] [--] src1 ... srcN directory
如果我将set -x添加到我的脚本中,我会得到这个......
+ /usr/bin/cp /u02/dir/
Usage: cp [-fhipHILPU][-d|-e] [-r|-R] [-E{force|ignore|warn}] [--] src target
or: cp [-fhipHILPU] [-d|-e] [-r|-R] [-E{force|ignore|warn}] [--] src1 ... srcN directory
+ set +x
EXTRA特有的一点是,如果我重新运行脚本而不改变任何内容,我会将其作为输出:
cp: /u01/dir/*file*: No such file or directory
现在我还没有在源代码中使用匹配的文件测试这个脚本(我会很快),但我想确保我没有错过任何东西。我不关心错误,我只是想确定我得到了正确的错误(即没有这样的文件或目录)。
任何见解都将受到赞赏。
答案 0 :(得分:1)
您可以按照@elliotfrisch的建议使用find
:
find "$source_dir/dir" -type f -name "*file*" -maxdepth 1 -exec cp {} "$target_loc/dir" \;
或者,在Bash中,您可以将glob结果捕获到数组中,并在数组不为空时调用cp
:
shop -s nullglob # glob expands to nothing if there are no matching files
files=("$source_loc/dir/"*file*)
((${#files[@]} > 0)) && cp "${files[@]}" "$target_loc"/dir/