我有一个目录,其中包含名为' 1',' 2',3' ..的目录,每个文件夹与'日期相关,如'符号链接:
1 -> 2013-03-12
2 -> 2013-02-12
3 -> 2013-01-12
..
我想做的就是进入符号链接名称的变量。例如,在上面的示例中,我将:
$LAST == "2013-01-13"
我正在使用bash脚本执行所有操作,而我正考虑将sed
与ls
--sort
选项结合使用。
我似乎无法从ls中提取日期。
知道怎么做吗?
答案 0 :(得分:2)
您可以使用readlink
:
readlink - 打印已解析的符号链接或规范文件名
下面是一个示例代码,列出当前目录中的所有文件( cf。 ./*
)并仅读取符号链接的目标( cf。 {{ 1}})进入[[ -h $fn ]]
变量。
$LAST
for fn in ./*; do [[ -h $fn ]] && LAST="$(basename "$(readlink "$fn")")"; done
答案 1 :(得分:1)
有用于获取链接目标名称的工具readlink
。例如。 readlink *
你的问题不是很清楚,我想你想要的可能是先排序ls
输出然后取最后一个链接目标名称。你可以尝试:
ls -lc|awk -F'-> ' 'NF==2&&/-> ....-..-..$/{n=$NF}END{print n}'
这可能不是完美的解决方案,因为它取决于ls输出。你的“类似日期”的字符串的正则表达式检查是相对宽松的,如果你愿意,可以使它更严格。
答案 2 :(得分:1)
你可以拥有
find dir -mindepth 1 -maxdepth 1 -regex '.*/[0-9]+$' | sort -V | xargs -n 1 readlink
获得最后一个:
readlink "$(find dir -mindepth 1 -maxdepth 1 -regex '.*/[0-9]+$' | sort -V | tail -n 1)"
您可以选择添加-type l
。
使用Bash,您可以使用此代替find
:
shopt -s extglob
printf '%s\n' dir/+([0-9])
答案 3 :(得分:0)
我不是Linux专家 一些答案我只是不知道如何修改以满足我的需要 这正是我所需要的:
LAST_DATE=`ls -l | sed -n 's/.*\([0-9][0-9][0-9][0-9]\-[0-9][0-9]\-[0-9][0-9]*\).*/\1/p' | sort -r | head -1`;