获取文件列表作为脚本的输出?

获取文件列表作为脚本的输出?

我正在运行一个 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/

并在脚本命令末尾检测目录之间的差异workmirror并将输出重定向到纯文本文件:

diff -rq /home/user/work/ /home/user/mirror/ > /home/user/list-of-files.txt

您还可以使用 等过滤diff命令的输出sedawk以获得必要的数据格式。还要考虑从目录中删除自上次同步以来已从目录中删除的文件的--delete选项。rsyncmirrorwork

更新。更好的方法可能是在脚本之上创建文件列表:

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

相关内容