나는 그것을 stat -f %m .bashrc
osx에서 .bashrc의 수정 시간을 얻는 데 사용합니다. 하지만 우분투에서 동일한 명령을 실행하면 오류가 발생합니다.
stat: cannot read file system information for %m': No such file or directory
이를 달성할 수 있는 호환 가능한 방법이 있습니까?
답변1
Ubuntu는 GNU coreutils를 사용 stat
하고 OSX는 BSD 변형을 사용합니다. 따라서 Ubuntu에서는 명령이 약간 다릅니다.
stat -c %Y .bashrc
에서 man stat
:
-c --format=FORMAT use the specified FORMAT instead of the default; output a new‐ line after each use of FORMAT
그리고:
%Y time of last data modification, seconds since Epoch
운영 체제에 관계없이 이식 가능한 방법을 원한다면 몇 가지 방법이 있습니다. 나는 변수를 한 번에 하나씩 적절한 매개변수로 설정해야 한다고 생각했습니다.
if uname | grep -q "Darwin"; then
mod_time_fmt="-f %m"
else
mod_time_fmt="-c %Y"
fi
그런 다음 stat
명령에서 필요할 때마다 해당 값을 사용하십시오.
stat $mod_time_fmt .bashrc
답변2
"이것"이 무엇을 의미하는지에 따라 다릅니다. 파일을 가져오는 이식 가능한 방법이 있는지 묻는다면 아니요 mtime
, stat(1)
없습니다. BSD는 stat(1)
리눅스와 다릅니다 stat(1)
.
파일을 가져오는 이식 가능한 방법이 있는지 묻는다면 mtime
예, 다음을 사용하여 수행할 수 있습니다 perl(1)
.
perl -e 'print +(stat $ARGV[0])[9], "\n"' file
답변3
OSX와 Ubuntu 버전 간에는 stat
약간의 차이가 있기 때문에 OSX는 stat
기본적으로 간결한 출력을 사용하고 Linux는 stat
기본적으로 자세한 출력을 사용하므로 건너뛰어야 할 몇 가지 문제가 있습니다. 한 가지 가능성은 단순히 OSX에서 별칭을 사용하여 stat가 둘 다에서 동일한 작업을 수행하도록 하는 것입니다.
stat
OSX에서 자세한 출력을 강제하기 위해 별칭을 설정하는 것이 마음에 들지 않으면 alias stat="stat -x"
Perl이 필요하지 않습니다.
stat .bashrc| grep Modify
이것이 우분투에서 필요한 모든 것입니다. 위와 같이 별칭을 설정하면 다음과 같은 상황에서 작동합니다.운영체제도 마찬가지
Ubuntu 14.04.5의 예 Ubuntu 16.04에서도 거의 동일한 결과를 얻을 수 있습니다.
stat .bashrc| grep Modify
Modify: 2014-03-30 23:14:47.658210121 -0500
원하는 것이 타임스탬프뿐이라면 Modify:
나머지는 제거하고 유지할 수 있습니다.
stat .bashrc| grep Modify | cut -c 9-
원천: