使用bash,比较两个目录,如果某个模式在一个目录中但不在另一个目录中,则将其复制到第三个目录

使用bash,比较两个目录,如果某个模式在一个目录中但不在另一个目录中,则将其复制到第三个目录

我有

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

比较两个目录dir_1dir_2。我想查找与 中的模式匹配dir_1dir_2名为*.PATTERN.

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

如果该模式存在dir_1但不存在dir_2,则将完整文件复制到该目录file_unique

答案1

像这样的东西吗?这只是为了让您开始,它不是很强大......

dir_1=<some directory, e.g., /foo>
dir_2=<some directory, e.g., /foo/bar>
file_unique=<some directory, e.g., /foo/bar/tmp/>
for file in ${dir_1}/lockinfo.*.PATTERN; do
   # first, are there any matching files? If not, $file will
   # be set literally to ".../lockinfo.*.PATTERN"
   [[ ! -f "$file"]] && break
   # OK, there is at least one file
   basename=$(basename ${file})
   # if there is no such file in dir_2, cp the original
   # file, preserving its permissions and ownership, etc.
   [[ ! -f ${dir_2}/${basename} ]] && cp -p $file $file_unique
done

根据需要添加额外的错误检查、空格支持等。

相关内容