最近修改的文件

最近修改的文件

我正在编写一个脚本来创建文件夹及其内容的备份。系统会提示用户输入要备份的文件夹名称。备份副本将使用以下约定命名:原始文件夹名称_文件夹中最后修改的任何文件的日期和时间。该脚本可以很好地进行复制,但我对如何提取上次修改文件的日期和时间感到困惑。

这是一个例子:

  1. 用户在提示符下输入 Documents/Graphite,以便复制 Graphite 文件夹及其内容
  2. Graphite 文件夹内有文件以及几个包含文件的子文件夹
  3. Graphite 文件夹及其子文件夹中最近修改的文件名为 index.js,位于 services 子文件夹中,其日期/时间戳为 1/28/2020 14:28:54

    对于上面概述的示例,当脚本运行需要发生两件事:
    a)终端为最近修改的文件输出以下内容:
    2020-01-28 14:28:54 ./services/index.js
    b)services/index.js 文件的最后修改日期和时间戳以这种格式存储在变量中2020-01-28_14-28-54

    的目的将日期/时间存储在变量中的原因是它将用于修改复制的文件夹的名称。

对此的回应邮政作者:@Heppo,于 2011 年 9 月 16 日 18:21 推荐将此用于类似的用例:

#!/bin/bash
find $1 -type f -print0 | xargs -0 stat --format '%Y :%y %n' | sort -nr | cut -d: -f2- | head

这与上面的要求 a) 很接近,只是它显示超过 1 个文件并且时间戳格式不同。尽管将命令插入explainshell.com,但我不确定如何更改它以满足要求a)。

任何有关如何获取这两个要求的信息的指导将不胜感激,因为我是 Linux 新手。

答案1

由于您使用的是 Ubuntu 并且有find可用的 GNU,因此您可以使用该选项打印最新的修改日期-printf

find "$1" -type f -printf '%TY-%Tm-%Td_%TH-%TM-%TS\n' | sort -r | head -n1

会输出类似的东西

2020-01-28_14-28-54.0000000000

不幸的是,您必须去掉秒的小数部分,因为没有它就无法打印秒。

lastmod=$(find "$1" -type f -printf '%TY-%Tm-%Td_%TH-%TM-%TS\n' | sort -r | head -n1)
lastmod=${lastmod%.*} # strip fractional part

相关内容