创建带有最新文件时间戳的目录

创建带有最新文件时间戳的目录

我正在尝试根据目录中 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并将其复制ab该目录中,这是当前目录中的最新文件

答案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/

相关内容