1つのコマンドで/ tmp /などのディレクトリに曜日(たとえば月曜日、火曜日、...土曜日)を付けたディレクトリを作成するにはどうすればよいですか?
mkdir
date +%A
または他の組み合わせと同じです。
mkdir -p /tmp/"$(date +%A)" ---> /tmp/Tuesday
コマンドは実行後に次のようになります。
/tmp/Monday
/tmp/Tuesday
.
.
.
/tmp/Saturday
スクリプトではなく単一のコマンドでこれを実行したいと思います。
答え1
次の「コマンド」を使用して目的の結果を得ることができます。
for i in {1..7}; do mkdir /tmp/$(date +"%A" --date "$i days ago"); done
答え2
中かっこ拡張を使用できます。
mkdir -p /tmp/{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday}
上記は次のとおりです(これも単一のコマンドです)。
mkdir -p /tmp/Sunday /tmp/Monday /tmp/Tuesday /tmp/Wednesday /tmp/Thursday /tmp/Friday /tmp/Saturday
答え3
そしてzsh
:
zmodload zsh/langinfo # if not already loaded
mkdir /tmp/${(v)^langinfo[(I)DAY_*]}
お住まいの地域の日付名を使用してください。単一のコマンドで:
zsh -c 'zmodload zsh/langinfo && mkdir /tmp/${(v)^langinfo[(I)DAY_*]}'
$langinfo
日付名を含む一部のロケール設定を公開する特別な連想配列。一致する配列(たとえば、...)$langinfo[(I)DAY_*]
のキーを出力します。パラメータ拡張フラグを使用すると、これらのキーの値を拡張できます。これらの要素を割り当てて、...DAY_*
DAY_1
DAY_2
(v)
^
/tmp/value1
/tmp/value2
POSIXに似たシェルを使用すると、次のこともできます。
(cd /tmp && IFS=';' && set -o noglob && mkdir $(locale day))
locale day
;
現在のロケールの日付名を区切りリストとして返します。$(...)
無効にすると、分割+glob演算子を使用します(コマンド置換を引用符で囲んでいません)。全体的な状況セクション(set -o noglob
)と調整分ける;
()分割する部分ですIFS=';'
。