我想查找与 dir_1 和 dir_2 中名为 *.PATTERN 的模式匹配的文件,并将其复制到另一个目录

我想查找与 dir_1 和 dir_2 中名为 *.PATTERN 的模式匹配的文件,并将其复制到另一个目录

我有

dir_1=/foo
dir_2=/foo/bar
file_unique=/foo/bar/tmp/

比较两个目录dir_1dir_2。我想查找dir_1与中的模式匹配的文件,dir_2称为*.PATTERN

PATTERN 是任何单词的占位符。dir_1文件示例是lockinfo.1234.mikeylockinfo.1235.mikey.

dir_2 file例子是1234.mickey.AB1235.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 发行版上也可以独立使用)来检测此类错误。

相关内容