我有
dir_1=/foo
dir_2=/foo/bar
file_unique=/foo/bar/tmp/
比较两个目录dir_1
和dir_2
。我想查找dir_1
与中的模式匹配的文件,dir_2
称为*.PATTERN
PATTERN 是任何单词的占位符。dir_1
文件示例是lockinfo.1234.mikey
或lockinfo.1235.mikey
.
dir_2 file
例子是1234.mickey.AB
和1235.mikey.AB
如果该模式存在dir_1
但不存在dir_2
,则将完整文件复制到该目录file_unique
#!/bin/bash
# setup folders for our different stages
dir_1=/dev/shm
dir_2=/var/spool/jobs
file_unique=/dev/shm/tmp
mkdir /dev/shm/tmp
for file in "${dir_1}"/.lockinfo.*.mickey; do
[[ ! -f "$file"]] && break
basename=$(basename ${file})
[[ ! -f ${dir_2}/${basename} ]] && cp -p $file $file_unique
done
上面给出了错误:
gpu_lock_healthcheck.ver1: line 13: unexpected token `newline', conditional binary operator expected
gpu_lock_healthcheck.ver1: line 13: syntax error near `break'
gpu_lock_healthcheck.ver1: line 13: ` [[ ! -f "$file"]] && break '
答案1
第 13 行有一个拼写错误:结束符之前]]
(after "$file"
)必须有一个空格,以便 shell 将其识别为条件测试构造的结尾。
我建议您使用以下命令检查 shell 脚本shellcheck
工具(在许多 Linux 发行版上也可以独立使用)来检测此类错误。