我需要在当前目录中获取最新的构建文件。逻辑是这样的:
到目前为止,我得到了这个,但它不完整
find ./build -iregex '.*/build_.*\.tar\.gz' -type f -exec basename {} \;
我很困惑地将它排序以获得最新的
答案 0 :(得分:1)
此find
应该可以使用stat
和sort
:
find ./build -iregex '.*/build_.*\.tar\.gz' -type f -exec stat -c '%Y %n' {} + |
sort -rn -k1,1 | head -1 | cut -d " " -f2-
在OSX上试试这个sed
:
find ./build -iregex '.*/build_.*\.tar\.gz' -type f -exec stat -f '%m %N' {} + |
sort -rn -k1,1 | head -1 | cut -d " " -f2-
答案 1 :(得分:1)
对于纯粹的Bash可能性:
#!/bin/bash
shopt -s globstar nullglob nocaseglob
latest=
for file in ./build/**/build_*.tar.gz; do
[[ -f $file ]] || continue
[[ $latest ]] || latest=$file
[[ $file -nt $latest ]] && latest=$file
done
if [[ $latest ]]; then
echo "Latest build: ${latest##*/}"
else
echo "No builds found"
fi
答案 2 :(得分:0)
拥有GNU find
,您可以使用以下命令:
find ./build -iregex '.*/build_.*\.tar\.gz' -printf '%T@ %f\n' | sort -n | tail -n1 | cut -d' ' -f2
它使用find
的printf操作来打印最新修改的时间戳以及文件名(basename)。然后将其传送到sort
,使用tail
提取最后一行,最后使用cut
将名称与时间戳分开。