stat: 파일의 수정 타임스탬프

stat: 파일의 수정 타임스탬프

나는 그것을 stat -f %m .bashrcosx에서 .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가 둘 다에서 동일한 작업을 수행하도록 하는 것입니다.

statOSX에서 자세한 출력을 강제하기 위해 별칭을 설정하는 것이 마음에 들지 않으면 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-

원천:

https://ss64.com/osx/stat.html

OSX의 통계 출력

관련 정보