【发布时间】:2017-04-06 20:37:53
【问题描述】:
我有这个对我有用的命令,它将在当前目录中找到零个或一个与模式匹配的目录:
find . -maxdepth 1 -type d -name 'suman-*'| head -n1
在 MacOS 上,这将导致如下结果:
./suman-1479860474833
<!EDIT>
我的目标是找到最近的目录(带有最近的时间戳)。目录内容如下:
foo
bar
baz
suman-1479860475524
suman-1479860471431
suman-1479860474233
...
etc.
</EDIT>
我有三个问题,
使用 bash,如果
./字符存在于结果中,我如何去除它们?他们应该总是在那里,但我认为总是删除 前两个字符可能太笨拙了。使用 bash,而不是使用
head查找第一个结果,查找最后一个结果的最佳方法是什么?我猜是tail但也许在那里 是更好的方法。有没有办法只匹配一个数字而不是只使用
'suman-*'?或许我应该使用-regex而不是-name?
现在,我可以按目录名称中的时间戳对目录进行排序,或者我可以按元数据对它们进行排序(如果元数据准确并通过版本控制更新等保持不变)。我个人不确定目录元数据是否足够持久,所以我想更透明并使用目录名称中的时间戳。 而且看起来在 Unix 中没有为目录创建时间 =>“在 Unix 中不存储创建时间(仅:访问、修改和更改)。”
【问题讨论】:
-
find没有保证订单。您不应该使用head或tail来尝试查找特定目录。 -
实际目标是什么,是“第一”还是“最后”?
-
在某种程度上,
sort在head之前可以解决第一个/最后一个问题... -
@AlexanderMills:感谢您的编辑;在 macOS 上,默认情况下您无权访问 GNU
find,如果只对直接子目录感兴趣,那么 glob 和可能的ls的组合是最简单的。 -
@AlexanderMills 我在 OS X 和 FreeBSD 上玩过这个,因为这实际上对我的应用程序很有用。请参阅更新的答案。无论您是否采用这种方法,我都很想知道它是如何工作的。如果有什么我忽略了。它适用于开箱即用的 Mac 系统、我的开发 Mac 和 FreeBSD 10 系统。
标签: bash macos unix cross-platform sh