bash - Bash:如何使用 bash 脚本解析包含 ls -ltr 输出的日志文件以提取在特定时间之前修改的文件名
问题描述
我正在尝试使用 Unix bash 脚本获取 SFTP 目录中在 24 小时之前最后修改的所有文件。请注意,我的环境不支持 lftp 选项。因此,我创建了一个脚本,将 SFTP 目录的所有子目录列出到本地文件,然后我使用循环遍历所有这些子目录名称,使用 ls -ltr 打印目录的内容并指示输出到本地文件。
现在我有一个包含以下内容的文件,假设当前时间是 10 月 28 日 22:32。
-rw------- 1 200 100 1930 Oct 25 08:31 File1
-rw------- 1 200 100 280 Oct 25 11:32 File2
-rw------- 1 200 100 280 Oct 25 12:17 File3
-rw------- 1 200 100 280 Oct 25 22:31 File4
-rw------- 1 200 100 280 Oct 26 22:32 File5
-rw------- 1 200 100 280 Oct 27 22:31 File6
-rw------- 1 200 100 280 Oct 16 09:59 File7
-rw------- 1 200 100 280 Oct 16 09:59 File8
-rw------- 1 200 100 280 Oct 16 10:00 File9
是否可以获得所有文件名及其最后修改的时间戳,最后修改日期 < sysdate - 24 小时?
解决方案
对于自动化,我强烈建议使用“lftp”。'sftp' 是一个简单的接口,适合交互使用(例如,没有失败的状态码等)。
'lftp' 有很多超越 'sftp' 的选项。特别是,它具有“客户端”列表(cls):
sftp
open sftp://host/path
user user password
cls -l --time-style='%Y-%m-%d %H:%M:%S'
Output:
drwxr-xr-x 2 root root 4096 2019-10-13 16:01:46 /bin/
drwxr-xr-x 3 root root 4096 2019-06-30 08:07:02 /boot/
drwxr-xr-x 2 root root 4096 2019-06-09 19:36:33 /cdrom/
drwxr-xr-x 18 root root 3960 2019-10-19 08:08:01 /dev/
drwxr-xr-x 150 root root 12288 2019-10-20 15:49:39 /etc/
drwxr-xr-x 4 root root 4096 2019-06-09 23:18:04 /home/
如果您正在寻找截止日期,您还可以按时间排序(我相信--sort=date
,并且可以选择反向-r
),并在匹配日期范围后停止处理。
旁注:sftp 有一个有限的“查找”命令。不幸的是,它不提供按日期过滤。
我尝试过的大多数其他“sftp”客户端都使用默认的 LS 格式。例外是用于 Perl、Python 的 SFTP 模块,它为客户端提供“Unix”格式的日期,允许任何测试。但是,这比使用lftp
.
推荐阅读
- android - 片段中 ListView 的自定义适配器不起作用
- html - If i uninstall chinese "SimSun" and "Mingliu" font, what is the default font that it will show?
- python - 为什么使用 gzip 重新压缩文件会产生不同的输出?
- nxp-microcontroller - Stepping over a library (in-built) function in NXP FXTH870911
- javascript - 如何在 React 中显示来自 API 的数据
- python - ContractLogicError while using web3.py
- ios - 如何知道用户是否完成在 PDFView 中选择文本
- python - Python websocket stream large results
- c - 用c语言一次读取一行csv文件
- python - 使用 f2py 和 intel 编译器将 MKL 与 fortran 链接