Solaris date
не поддерживает параметр -d
, такой как GNU date
.
Вы можете использовать perl
:
$ perl -MPOSIX=strftime -le '@t = localtime; $t[3] = 1; $t[4]--; print strftime("%m", @t)'
05
$ perl -MPOSIX=strftime -le '@t = localtime; $t[3] = 1; $t[5]--; print strftime("%Y", @t)'
2013
Или, если у вас есть ksh93
:
$ printf "%(%m)T\n" "last month"
05
$ printf "%(%Y)T\n" "last year"
2013
Обновлено
Для комментария @ glennjackman я нашел документацию в Time Модуль :: Piece :
The months and years can be negative for subtractions. Note that there is some "strange" behaviour when adding and subtracting months
at the ends of months. Generally when the resulting month is shorter than the starting month then the number of overlap days is
added. For example subtracting a month from 2008-03-31 will not result in 2008-02-31 as this is an impossible date. Instead you will
get 2008-03-02. This appears to be consistent with other date manipulation tools.
Поскольку OP хочет получить только предыдущий год и месяц, мы можем установить $ t [3] = 1
, чтобы решить эту проблему.
Расширение фигурной скобки подходит для этого:
cp /opt/other/very/very/long/path/{fileA,fileB}
... расширится до:
cp /opt/other/very/very/long/path/fileA /opt/other/very/very/long/path/fileB
при фактическом выполнении.
Команда появится в вашей истории в том виде, в котором вы ее набрали, что сохраняет пути:
$ history
#...
508 cp /opt/other/very/very/long/path/{fileA,fileB}
509 history
Вы можете установить переменную с самим путем журнала и использовать эту переменную вместо этого в команде cp.
например
export dir="/opt/very/long/path"
cp "$dir"/file "$dir"/file2
Вы можете использовать rsync, если хотите синхронизировать 2 папки.
rsync также можно использовать для синхронизации на локальном и удаленных хостах.
В приведенном выше сценарии он используется на локальном хосте:
rsync -avzh sourcefolder destinationfolder
Вы можете ввести:
cp /opt/other/very/very/long/path/fileA !#:1:h/fileB
в истории он расширится до:
cp /opt/other/very/very/long/path/fileA /opt/other/very/very/long/path/fileB
Пояснение:
!#
-получить текущую строку :1
-получить первый аргумент :h
-получить папку (спасибо за эту статью)
Недостаток в том, что:
up arrow
, чтобы получить введенную вами команду, потому что она сохранена в расширенном виде в истории,