我已经去了很多目录,名称如下:
/data/db/OX/8_10
/data/db/OX/9_1
/data/db/OX/9_2
并且需要将一些文件(所有文件pt.*
)从第二个最新的文件(上图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"/
并从shell 脚本中的目录列表中派生$prior_version
和。$latest_version
/data/db/OX/
答案1
使用zsh
shell,您可以执行以下操作:
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)
- 选择前两个
- 将文件从第二个复制
pt.*
到第一个。