.bashrc
ISO日付というフォルダにマークダウンやテキストファイルを作成できるようにエイリアスを作成したいと思います。グリニッジ標準時次にエディタでファイルを開きます。
これは私の予想出力(はい)です。
./20211226220131/readme.md
とreadme.md
で開かれましたvim
。
答え1
bash
バージョン4.2以降を使用しているとします。
edmd () {
local now
TZ=GMT printf -v now '%(%Y%m%d%H%M%S)T' -1
mkdir "$now" && "${EDITOR:-vim}" "$now/readme.md"
}
now
このシェル関数は、GMTタイムゾーンの現在のタイムスタンプを含むローカル変数を生成します。その後、このタイムスタンプを使用して名前付きディレクトリを作成します。成功した場合は、readme.md
必要なエディタを使用するか、ディレクトリが空または設定されていないvim
場合はそのディレクトリ内のファイルを編集できます。EDITOR
このシェル関数は通常、エイリアスを宣言するたびに宣言され、次のように使用されます。
$ edmd
シェル機能は外部ユーティリティに依存せず、date
誤って現在の作業ディレクトリを変更することはできません。
テスト:
$ edmd
(私のエディタが開いたら、何かを入力してファイルを保存してエディタを終了します。)
$ tree
.
`-- 20211226092420
`-- readme.md
1 directory, 1 file
また、日付と時刻のISO 8601形式は、次のように書かれています。
- 「2021-12-26T14:52:04Z」または
- 「20211226T145204Z」
UTCタイムゾーンまたは
- 「2021-12-26T14:52:04+00:00」
...ここで「00:00」はUTCに基づく時間オフセットを提供します。
したがって、使用することができます
TZ=UTC printf -v now '%(%Y-%m-%d-T%H:%M:%SZ)T' -1
または
TZ=UTC printf -v now '%(%Y%m%dT%H%M%SZ)T' -1
または
TZ=GMT printf -v now '%(%Y-%m-%d-T%H:%M:%S%z)T' -1
...「ISO日付」を取得します。
答え2
スクリプトを呼び出すのではなく、自分で作成したスクリプトのエイリアスを探している場合は、次のようになります。
alias datef='d="$(date +"%Y%m%d%H%M%S")" && mkdir "$d" && cd "$d" && vim readme.md'
エイリアスが実行されているのと同じフォルダに残る場合は(/[date]
vimを終了した後にそのフォルダに滞在するのではなく)、cd
サブシェルで次を使用します(効果はcd
サブシェルにローカルです)。
alias datef='d="$(date +"%Y%m%d%H%M%S")" && mkdir "$d" && ( cd "$d" && vim readme.md )'
または、ディレクトリをまったく変更しないでください。
alias datef='d="$(date +"%Y%m%d%H%M%S")" && mkdir "$d" && vim "$d/readme.md"'
答え3
エイリアスを使用すると、これらすべてを簡単に実行できます。例:
alias foo='mkdir -p "$(TZ=GMT date +"%Y%m%d%H%M%S")" && vim "$_"/readme.md'
-p
ディレクトリがすでに存在していても、readme.md
そのディレクトリ内のファイルを編集または作成できるようにしたいです。コマンドTZ=GMT
のタイムゾーンをdate
GMTに設定します。この変数は前のコマンドで指定された引数として保存されるため、作成したディレクトリにファイルが$_
開きます。から:vim $_/readme.md
readme.md
man bash
_
シェルが起動したら、環境または引数リストに渡されたシェル、または実行中のシェルスクリプトを呼び出すために使用されるパス名に設定します。その後、拡張後、フォアグラウンドで実行された前の単純コマンドの最後の引数に展開されます。
答え4
このスクリプトを書いて解決策を見つけました。
#!/bin/bash
d="$(TZ=GMT date +"%Y%m%d%H%M%S")"
mkdir "$d"
cd "$d"
vim readme.md