Я использую комбинацию stat
и touch
для получения/установки временных меток на файлах и репертуарах. Но мне нужно другой набор окон, если на Mac OS X или GNU/Linux:Как получить/установить время модификации кросс-платформенным способом из сценария (bash)?
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], затем' ....) –
Вы можете отменить часовой пояс. Он не будет записан в файловую систему: http://stackoverflow.com/questions/30119732/do-filesystems-store-time-zone-information – ceving
@JeffY Я надеялся на код, общий для GNU/Linux, такой как Ubuntu и Mac OS X ... сохранение условности в крайнем случае. И даже если использовать условия, я должен иметь возможность создавать на Linux последовательность команд, подходящих для Mac OS, и наоборот. – jfbu