假设我有名为 af32、af42、af 的文件夹,并且我想要打印所有具有 af* 模式的文件夹的最后修改日期。我编写了一个 shell,它将以文件夹或文件作为参数并返回该文件夹的修改日期。
stat -c %y "$1"
此代码将返回文件夹的最后修改日期。但如何将此代码应用于名称中具有相同模式的多个文件夹
答案1
您可以使用find
在 中递归搜索与特定模式 glob 匹配的search_folder/
目录 ( )(例如):-type d
-name 'af*'
find search_folder/ -type d -name 'af*' -exec stat -c '%y %n' '{}' \;
然后,这将对每个搜索结果执行( -exec ... \;
)命令,用结果路径替换,从给定的开始。stat -c '%y %n' '{}'
{}
search_folder/
请注意,我修改了您的输出以在结果中stat
包含文件名/路径,因为否则您将看不到每个修改日期属于哪个文件。%n
答案2
您可以按如下方式使用 shell 通配符:
stat -c %y af*/
af*/
匹配当前目录中以“af”开头的每个目录。
如果抛出类似以下错误
bash: /usr/bin/stat: Argument list too long
请使用这种printf
方法:
printf '%s\0' af*/ | xargs -0 stat -c %y
示例运行
您可能想要添加%n
到stat
的输出...
$ ls
af af32 af42 bf cg45
$ stat -c %y af*/
2018-06-05 18:59:55.355277977 +0200
2018-06-04 19:01:28.968869600 +0200
2018-06-06 18:58:15.968639269 +0200
$ stat -c '%y %n' af*/
2018-06-05 18:59:55.355277977 +0200 af/
2018-06-04 19:01:28.968869600 +0200 af32/
2018-06-06 18:58:15.968639269 +0200 af42/