1つのライナーmkdirを使用するdaysというディレクトリ?

1つのライナーmkdirを使用するdaysというディレクトリ?

1つのコマンドで/ tmp /などのディレクトリに曜日(たとえば月曜日、火曜日、...土曜日)を付けたディレクトリを作成するにはどうすればよいですか?

mkdirdate +%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_1DAY_2(v)^/tmp/value1/tmp/value2

POSIXに似たシェルを使用すると、次のこともできます。

(cd /tmp && IFS=';' && set -o noglob && mkdir $(locale day))

locale day;現在のロケールの日付名を区切りリストとして返します。$(...)無効にすると、分割+glob演算子を使用します(コマンド置換を引用符で囲んでいません)。全体的な状況セクション(set -o noglob)と調整分ける;()分割する部分ですIFS=';'

関連情報