Comparing the time of a symlink
I want to check whether link lnkfile
is older than a regular reference file reffile
.
The bash test
builtin dereferences links, so test lnkfile -ot reffile
compares the target of lnkfile
, not the link itself.
Is there a way to make the test
builtin not follow symlinks? Otherwise, how can I compare the time of a symlink?
bash shell-script symlink timestamps
add a comment |
I want to check whether link lnkfile
is older than a regular reference file reffile
.
The bash test
builtin dereferences links, so test lnkfile -ot reffile
compares the target of lnkfile
, not the link itself.
Is there a way to make the test
builtin not follow symlinks? Otherwise, how can I compare the time of a symlink?
bash shell-script symlink timestamps
add a comment |
I want to check whether link lnkfile
is older than a regular reference file reffile
.
The bash test
builtin dereferences links, so test lnkfile -ot reffile
compares the target of lnkfile
, not the link itself.
Is there a way to make the test
builtin not follow symlinks? Otherwise, how can I compare the time of a symlink?
bash shell-script symlink timestamps
I want to check whether link lnkfile
is older than a regular reference file reffile
.
The bash test
builtin dereferences links, so test lnkfile -ot reffile
compares the target of lnkfile
, not the link itself.
Is there a way to make the test
builtin not follow symlinks? Otherwise, how can I compare the time of a symlink?
bash shell-script symlink timestamps
bash shell-script symlink timestamps
edited 4 hours ago
Jeff Schaller
39.7k1054126
39.7k1054126
asked 5 hours ago
L. LevrelL. Levrel
1,167412
1,167412
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
As far as I know, bash doesn't offer any versions of -ot
(and the like) which avoid dereferencing symlinks.
What you can do instead is use GNU stat (which doesn't dereference symbolic links without -L
) and compare their mtime epochs numerically:
if (( "$(stat --format=%Z lnkfile)" < "$(stat --format=%Z reffile)" )); then
# lnkfile is older
fi
add a comment |
I don't think there is a way with test
, but you could use find
.
test "$(find lnkfile ! -newer reffile)" && command
Here, find
returns output if lnkfile
is older than reffile
. test
without an option is equivalent to test -n
. This is true if the length of the string is nonzero. Hence, if there is output from find
, command
is executed.
Whattest
implementation do you have that does not have-n
? It's a standard option... Also quote the command substitution.
– Kusalananda
4 hours ago
@Kusalananda I'm just confirming that no options is identical to-n
, so it's easier to grep theman
. Good point with the quote. Thanks.
– Sparhawk
4 hours ago
I misunderstood what you were saying about-n
and read it as "there is no-n
option" instead of "test
without an option is the same astest -n
".
– Kusalananda
3 hours ago
@Kusalananda Ah got it. I edited to clarify my ambiguous language. Thanks again.
– Sparhawk
2 hours ago
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f495864%2fcomparing-the-time-of-a-symlink%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
As far as I know, bash doesn't offer any versions of -ot
(and the like) which avoid dereferencing symlinks.
What you can do instead is use GNU stat (which doesn't dereference symbolic links without -L
) and compare their mtime epochs numerically:
if (( "$(stat --format=%Z lnkfile)" < "$(stat --format=%Z reffile)" )); then
# lnkfile is older
fi
add a comment |
As far as I know, bash doesn't offer any versions of -ot
(and the like) which avoid dereferencing symlinks.
What you can do instead is use GNU stat (which doesn't dereference symbolic links without -L
) and compare their mtime epochs numerically:
if (( "$(stat --format=%Z lnkfile)" < "$(stat --format=%Z reffile)" )); then
# lnkfile is older
fi
add a comment |
As far as I know, bash doesn't offer any versions of -ot
(and the like) which avoid dereferencing symlinks.
What you can do instead is use GNU stat (which doesn't dereference symbolic links without -L
) and compare their mtime epochs numerically:
if (( "$(stat --format=%Z lnkfile)" < "$(stat --format=%Z reffile)" )); then
# lnkfile is older
fi
As far as I know, bash doesn't offer any versions of -ot
(and the like) which avoid dereferencing symlinks.
What you can do instead is use GNU stat (which doesn't dereference symbolic links without -L
) and compare their mtime epochs numerically:
if (( "$(stat --format=%Z lnkfile)" < "$(stat --format=%Z reffile)" )); then
# lnkfile is older
fi
answered 5 hours ago
Chris DownChris Down
79.7k14188202
79.7k14188202
add a comment |
add a comment |
I don't think there is a way with test
, but you could use find
.
test "$(find lnkfile ! -newer reffile)" && command
Here, find
returns output if lnkfile
is older than reffile
. test
without an option is equivalent to test -n
. This is true if the length of the string is nonzero. Hence, if there is output from find
, command
is executed.
Whattest
implementation do you have that does not have-n
? It's a standard option... Also quote the command substitution.
– Kusalananda
4 hours ago
@Kusalananda I'm just confirming that no options is identical to-n
, so it's easier to grep theman
. Good point with the quote. Thanks.
– Sparhawk
4 hours ago
I misunderstood what you were saying about-n
and read it as "there is no-n
option" instead of "test
without an option is the same astest -n
".
– Kusalananda
3 hours ago
@Kusalananda Ah got it. I edited to clarify my ambiguous language. Thanks again.
– Sparhawk
2 hours ago
add a comment |
I don't think there is a way with test
, but you could use find
.
test "$(find lnkfile ! -newer reffile)" && command
Here, find
returns output if lnkfile
is older than reffile
. test
without an option is equivalent to test -n
. This is true if the length of the string is nonzero. Hence, if there is output from find
, command
is executed.
Whattest
implementation do you have that does not have-n
? It's a standard option... Also quote the command substitution.
– Kusalananda
4 hours ago
@Kusalananda I'm just confirming that no options is identical to-n
, so it's easier to grep theman
. Good point with the quote. Thanks.
– Sparhawk
4 hours ago
I misunderstood what you were saying about-n
and read it as "there is no-n
option" instead of "test
without an option is the same astest -n
".
– Kusalananda
3 hours ago
@Kusalananda Ah got it. I edited to clarify my ambiguous language. Thanks again.
– Sparhawk
2 hours ago
add a comment |
I don't think there is a way with test
, but you could use find
.
test "$(find lnkfile ! -newer reffile)" && command
Here, find
returns output if lnkfile
is older than reffile
. test
without an option is equivalent to test -n
. This is true if the length of the string is nonzero. Hence, if there is output from find
, command
is executed.
I don't think there is a way with test
, but you could use find
.
test "$(find lnkfile ! -newer reffile)" && command
Here, find
returns output if lnkfile
is older than reffile
. test
without an option is equivalent to test -n
. This is true if the length of the string is nonzero. Hence, if there is output from find
, command
is executed.
edited 2 hours ago
answered 5 hours ago
SparhawkSparhawk
9,48263992
9,48263992
Whattest
implementation do you have that does not have-n
? It's a standard option... Also quote the command substitution.
– Kusalananda
4 hours ago
@Kusalananda I'm just confirming that no options is identical to-n
, so it's easier to grep theman
. Good point with the quote. Thanks.
– Sparhawk
4 hours ago
I misunderstood what you were saying about-n
and read it as "there is no-n
option" instead of "test
without an option is the same astest -n
".
– Kusalananda
3 hours ago
@Kusalananda Ah got it. I edited to clarify my ambiguous language. Thanks again.
– Sparhawk
2 hours ago
add a comment |
Whattest
implementation do you have that does not have-n
? It's a standard option... Also quote the command substitution.
– Kusalananda
4 hours ago
@Kusalananda I'm just confirming that no options is identical to-n
, so it's easier to grep theman
. Good point with the quote. Thanks.
– Sparhawk
4 hours ago
I misunderstood what you were saying about-n
and read it as "there is no-n
option" instead of "test
without an option is the same astest -n
".
– Kusalananda
3 hours ago
@Kusalananda Ah got it. I edited to clarify my ambiguous language. Thanks again.
– Sparhawk
2 hours ago
What
test
implementation do you have that does not have -n
? It's a standard option... Also quote the command substitution.– Kusalananda
4 hours ago
What
test
implementation do you have that does not have -n
? It's a standard option... Also quote the command substitution.– Kusalananda
4 hours ago
@Kusalananda I'm just confirming that no options is identical to
-n
, so it's easier to grep the man
. Good point with the quote. Thanks.– Sparhawk
4 hours ago
@Kusalananda I'm just confirming that no options is identical to
-n
, so it's easier to grep the man
. Good point with the quote. Thanks.– Sparhawk
4 hours ago
I misunderstood what you were saying about
-n
and read it as "there is no -n
option" instead of "test
without an option is the same as test -n
".– Kusalananda
3 hours ago
I misunderstood what you were saying about
-n
and read it as "there is no -n
option" instead of "test
without an option is the same as test -n
".– Kusalananda
3 hours ago
@Kusalananda Ah got it. I edited to clarify my ambiguous language. Thanks again.
– Sparhawk
2 hours ago
@Kusalananda Ah got it. I edited to clarify my ambiguous language. Thanks again.
– Sparhawk
2 hours ago
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f495864%2fcomparing-the-time-of-a-symlink%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown