浏览名称包含给定模式的所有文件夹

浏览名称包含给定模式的所有文件夹

假设我有名为 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

示例运行

您可能想要添加%nstat的输出...

$ 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/

相关内容