私は次の名前を持つ多くのディレクトリを訪問しました。
/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"
どちらも同じことを行います。
- 彼らが取得するディレクトリのリストは次のとおりです。
number_number
- 数値を逆順に並べ替えます(nOn、sort -rn)。
- 最初の2つを選択してください。
- 2番目のファイルを
pt.*
最初のファイルにコピーします。