dir_1とdir_2で、*.PATTERNというパターンに一致するファイルを見つけて別のディレクトリにコピーしたいと思います。

dir_1とdir_2で、*.PATTERNというパターンに一致するファイルを見つけて別のディレクトリにコピーしたいと思います。

私は持っています

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

2つのディレクトリを比較し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行目にタイプミスがあります。シェルが条件付きテスト構成の終わりとして認識されるようにするには、ターミネーターの前]](後)にスペースが必要です。"$file"

以下を使用してシェルスクリプトを確認することをお勧めします。shellcheckこれらのエラーを検出するツール(多くのLinuxディストリビューションでスタンドアロンとしても利用可能)

関連情報