在一个目录中,我有许多文件,我需要对最近修改的带有.txt
后缀的文件做一些事情。
理想情况下,我想做
myutility "$newest"
最后,$newest
最近修改的文件的路径名在哪里。
如果这还可以被概括,那就太好了,这样我就可以在目录层次结构中获得最近修改的带有.txt
后缀的文件,如果我可以获得五个最近修改的文件,这样我就可以使用更好了
myutility "${newest[@]}"
.txt
在整个目录层次结构中的五个最近修改的文件上运行我的实用程序。
使用bash
or的解决方案ksh93
是最好的。
您可以使用 ls 按修改时间(或创建或访问)列出文件。
简单地说
获取最近 5 个最近的 .txt 文件
您可以使用 $() 或 xargs 将其输入 myutility。
如果需要递归,可以使用 find。
(可能的问题:你必须至少有一个 .txt 文件才能工作。你可以修复它,但它是最干净的解决方案)。
编辑:OP想知道如何处理带空格的文件名。这是一种解决方案:
如果你想解决上面提到的可能的问题,你可以先检查文件,
find ..... | egrep '.*' || exit
或者简单地在 ls 中包含一些无意义的文件名,然后忽略xargs ls -t ''
.尽管您使用和 glob 限定符标记了问题
bash
和ksh
, :zsh
打印
.
带扩展名的前 5 个普通文件 ( ),.txt
按修改时间升序排列 (om
)前任。
它可能看起来很难看,但使用
find
获取文件是最强大的方法,避免了名称中的空格和其他特殊字符的问题。您将获得修改时间 + 文件的列表,按最近排序,获取前n(此处5
),删除仅保留文件名的时间,并将其传递给您的脚本:如果您使用的是旧版本的
coreutils
(< v8.25head
won't support-z
) 或grep
(< v2.25 has a bug ),您可以使用脚本: