我正在编写一个脚本来创建文件夹及其内容的备份。提示用户输入要备份的文件夹名称。备份的副本将使用以下约定命名:原始文件夹名称_日期和文件夹中最后修改的任何文件的时间。该脚本可以很好地进行复制,但我不知道如何提取上次修改文件的日期和时间。
这是一个例子:
- 用户在提示符处输入 Documents/Graphite,以便复制 Graphite 文件夹及其内容
- 在 Graphite 文件夹中有文件和几个包含文件的子文件夹
- 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) 很接近,只是它显示了多个文件并且时间戳格式不同。尽管将命令插入 explainshell.com,但我不确定如何更改它以满足要求 a)。
任何有关如何获取这两个要求的信息的指导都将不胜感激,因为我是 Linux 新手。
由于您使用的是 Ubuntu 并且有可用的 GNU ,因此您可以使用该选项
find
打印最新的修改日期。-printf
会输出类似
不幸的是,您必须去掉秒的小数部分,因为没有它就无法打印秒数。