我正在尝试根据目录中 2 个最新文件的时间戳创建一个目录,然后将这 2 个文件复制到新创建的目录中。例如,所以
-rw-r--r-- 1 root root 0 Sep 24 12:01 a
-rw-r--r-- 1 root root 0 Sep 24 12:01 b
我想创建一个名为的目录20190924
并将其复制a
到b
该目录中,这是当前目录中的最新文件
答案1
此 zsh 脚本将选取当前目录中的两个最新(普通)文件,收集最近一个文件的修改时间戳,将该时间戳转换为 YYYYmmdd 格式,创建目录,然后将这两个最新文件复制到该目录中:
#!/bin/zsh
newest2=( *(.om[1,2]) )
dsec=$( stat -c %Y "${newest2[1]}" )
dnam=$( date -d @"$dsec" +%Y%m%d )
mkdir "$dnam"
cp -- "${newest2[@]}" "$dnam"
第一行分配 ,用限定符(在括号中)newest2
扩展通配符。*
预选赛要求:
.
-- 纯文件om
-- 按修改时间排序(从最新到最旧)[1,2]
-- 对列表进行切片以仅包含元素 1 到 2
然后我们询问stat
最新文件的修改时间(以秒为单位);该日期被传递给 GNU date
,GNU 以我们想要的格式返回目录名称。创建目录后,该cp
命令将这两个文件复制到该目录中。
答案2
这里我们假设您想要从第一的文件:
创建目录
dir="$(mkdir -p $(ls -ltp --full-time | grep -v / | awk '{print $6}' | sed -n '2p' | sed 's/-//g'))"
仅列出文件grep -v /
,按时间排序lt
,显示完整时间(因此我们有日期)--full-time
。
ls -ltp --full-time | grep -v /
选择日期列
awk '{print $6}'
检索与第一个文件对应的第二行(第一行显示文件数)并删除破折号:
sed -n '2p' | sed 's/-//g'
复制文件
cp $(ls -ltp --full-time | grep -v / | awk '{print $9}' | sed -n '2,3p' | tr '\n' ' ') "${dir}/"
仅列出文件grep -v /
,按时间排序lt
,显示完整时间(因此我们有日期)--full-time
。
ls -ltp --full-time | grep -v /
检索文件的名称:
awk '{print $9}'
选择第一个和第二个文件
sed -n '2,3p'
将新行替换为空格,这样我们就可以在一行中执行复制。
tr '\n' ' '
命令看起来像这样
cp x z 20190924/