Я использую комбинацию stat
и touch
для получения/установки меток времени для файлов и реперториев. Но мне нужны разные настройки, если на mac os x или GNU/Linux:
touch
на mac os x не знает описанную там опцию-d
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/touch.html
что позволяет такие вещи, как
touch -d "2007-11-12 10:15:30.002Z" ajosey
Кажется, я ограничен
-t [[CC]YY]MMDDhhmm[.SS]
.stat
также отличается, например, в моей учетной записи Linux он не распознает-t format
отstat
на mac os x.
Таким образом, в Linux я сейчас делаю что-то вроде
stat --format 'touch -d "%y" "%n"' index.html
создать командную строку типа
touch -d "2015-04-08 00:38:51.940365000 +0200" "index.html"
тогда как на mac os x у меня есть
stat -f "touch -t %Sm \"%N\"" -t %Y%m%d%H%M.%S index.html
что дает мне что-то (это не то же самое index.html
, что и раньше), например:
touch -t 201503281339.42 "index.html"
Как можно было бы справиться с этим унифицированным способом? Возможно, с некоторым sed
между ними?
Мне нужно создать последовательность touch
команд в формате, работающем на обеих платформах. Создание этой последовательности должно работать на обеих платформах.
Я открыт для других сценариев, кроме bash, с тем ограничением, что на стороне Linux у меня есть система без прав администратора. perl
есть This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi
.
uname -o
? (if [ $(uname -o) == linux ];then
....) - person Jeff Y   schedule 02.02.2016-t [[CC]YY]MMDDhhmm[.SS]
. - person ceving   schedule 02.02.2016-A 010000
для сокращения на один час. - person   schedule 02.02.2016python
вместо этого? - person trojanfoe   schedule 02.02.2016perl
тоже подумает, но ему еще предстоит научиться. - person   schedule 02.02.2016-o
является недопустимым вариантом дляuname
в mac os x. Было бы больше похоже наuname -s
:-s print the operating system name.
, что на практике возвращаетDarwin
. В моем Linuxuname -s
выводитLinux
. - person   schedule 02.02.2016