我正在运行一个 shell 脚本,该脚本运行多个 jar,因此写入位于不同目录中的不同文件。
我想获取在目录中创建的文件列表,作为上次运行脚本的输出。
我的文件名为date_time_ABC.txt
.我想按日期获取文件名,但在特定日期我可能会多次运行它,因此我将获取所有文件,包括之前运行中创建的文件。
有没有办法获取运行 shell 脚本后生成的文件列表。请建议。
答案1
如果你的时间不含第二,您可以使用ls
选项-u
:
-u 和 -lt:按访问时间排序并显示;与-l:显示访问时间并按名称排序;否则:按访问时间排序,最新的在前
否则,您可以列出当前文件ls -u -1>../Before
并在代码之后再次运行它ls -u -1 > ../After
,然后使用 comm -3 ../After ../Before
并完成您的工作
答案2
只是一个想法。保留 2 个目录 - 第一个包含脚本所涉及的文件(工作目录),第二个包含同步文件(镜像目录)。放入脚本同步命令的第一行:
rsync -xrlptgoEvv /home/user/work/ /home/user/mirror/
并在脚本命令末尾检测目录之间的差异work
,mirror
并将输出重定向到纯文本文件:
diff -rq /home/user/work/ /home/user/mirror/ > /home/user/list-of-files.txt
您还可以使用 等过滤diff
命令的输出sed
,awk
以获得必要的数据格式。还要考虑从目录中删除自上次同步以来已从目录中删除的文件的--delete
选项。rsync
mirror
work
更新。更好的方法可能是在脚本之上创建文件列表:
ls -la /home/user/work/ > /home/user/list-of-files.txt
并在脚本底部将新的文件列表附加到旧列表,对其进行排序并过滤仅代表新文件的唯一行:
ls -la /home/user/work/ >> /home/user/list-of-files.txt
cat /home/user/list-of-files.txt | sort | uniq -u > /home/user/list-of-new-files.txt