以前のバージョンディレクトリのデータセットを最新バージョンディレクトリにコピーする方法[閉じる]

以前のバージョンディレクトリのデータセットを最新バージョンディレクトリにコピーする方法[閉じる]

私は次の名前を持つ多くのディレクトリを訪問しました。

/data/db/OX/8_10
/data/db/OX/9_1
/data/db/OX/9_2

pt.*2番目の最新ファイル(上記9_1)から最新のファイル(上記)にいくつかのファイル(すべてのファイル)をコピーする必要があります9_2

私はこれを直接試しました。

cp -p /data/db/OX/9_1/pt.*  /data/db/OX/9_2

ただし、/data/db/OX/9_1/ & /data/db/OX/9_2は入力しないでください。私は次のような文章を書くことができるようにしたいです。

cp -p /data/db/OS/"$prior_version"/pt.* /data/db/OS/"$latest_version"/

そして、シェルスクリプトのディレクトリリストからおよびを派生させます$prior_version$latest_version/data/db/OX/

答え1

zshシェルを使用すると、次のことができます。

cd /data/db/OX || exit
latest_two=(<->_<->(N/nOn[1,2])
(($#latest_two == 2)) || exit
cp -p $latest_two[2]/pt.* $latest_two[1]/

POSIXly は、ファイル名に改行文字が含まれていないと仮定します。

cd /data/db/OX || exit
set -- $(ls -F |
  grep -xE '[0-9]+_[0-9]+/' |
  sort -rnt _ -k 1,1 -k 2,2 |
  head  -n 2)
[ "$#" -eq 2 ] || exit
cp -p "$2"pt.* "$1"

どちらも同じことを行います。

  1. 彼らが取得するディレクトリのリストは次のとおりです。number_number
  2. 数値を逆順に並べ替えます(nOn、sort -rn)。
  3. 最初の2つを選択してください。
  4. 2番目のファイルをpt.*最初のファイルにコピーします。

関連情報