我在服务器上有多个名称以 tomcat_ 开头的目录,在这个目录下有一个文件,例如managetest.class
现在我只需要获取以下格式的特定文件的修改日期和时间
文件夹名称修改日期
答案1
cd
到目录所在的目录tomcat_*
(它们不需要全部在同一目录中),然后执行以下命令:
find . -path "./*tomcat_*managetest.class"
这将匹配,例如:
./b/tomcat_c/managetest.class
./tomcat_a/managetest.class
./tomcat_a/b/managetest.class
但不是./b/c/managetest.class
。让我知道是否managetext.class
必须立即进去tomcat_*
。
现在,打印修改日期的完整命令:
find . -path "./*tomcat_*managetest.class" -exec stat -c "%n %y" {} \;
您可以使用 awk 选择您更感兴趣的字段(例如年份或时间),在上面的命令末尾写入类似, 或者像 gogoud 建议的那样,您可以使用's命令| awk '{print $1" "$2" "$3}'
,而不是使用 exec 。find
printf
答案2
正如 Ulrich 所建议的,你可以这样做find
:
find "/mydir" -type f -regex ".*/tomcat_.*/managetest.class" -printf "%h %T+\n"
更新:
为了获得您需要的格式,我们可以通过 awk 管道输出:
find "/mydir" -type f -path "*/tomcat_*/managetest.class" -printf "%h %T+\n" | awk -F"[ /.]" '{print $(NF-4),$(NF-1)}'
awk 语句将输出拆分为“[space]/”中任意字符处的字段。 - 然后它打印出第四个和倒数第一个字段,这些字段应该是您需要的字段,这样您就不会再看到更高级别的目录、文件名或瞬间。 (我也改用find
s-path
而不是-regex
,但它们都实现了相同的目标。)