Bashを使用して2つのディレクトリを比較し、パターンがあるディレクトリにはありますが、他のディレクトリにない場合は3番目のディレクトリにコピーします。

Bashを使用して2つのディレクトリを比較し、パターンがあるディレクトリにはありますが、他のディレクトリにない場合は3番目のディレクトリにコピーします。

私は持っています

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

2つのディレクトリを比較しdir_1ますdir_2dir_1というパターンをdir_2探したいです*.PATTERN

PATTERNすべての単語のプレースホルダーです。dir_1ファイルの例はlockinfo.1234.mikeyまたはですlockinfo.1235.mikeydir_21234.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

必要に応じて追加のエラーチェック、スペースサポートなどを追加します。

おすすめ記事