Один лайнер mkdir с именами каталогов в виде дней?

Не прибегая к причудливому регулярному выражению с подсчетом запятых, для этой проблемы лучше использовать awk .

awk -F, '$2=="ST"'
  • Параметр -F, указывает разделитель, который устанавливается в виде запятой для ваших данных.
  • $ 2 относится ко второму столбцу, который вы хотите сопоставить.
  • «ST» - это значение, которое вы хотите сопоставить.
1
28.03.2017, 15:02
3 ответа

Вы можете использовать следующую "команду" для получения желаемого результата:

for i in {1..7}; do mkdir /tmp/$(date +"%A" --date "$i days ago"); done
3
27.01.2020, 23:12

С 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 возвращает ;-разделенный список имен дней в текущей локали. Мы используем для него оператор split+glob (оставляем без кавычек подстановку команды $(...)), отключив часть glob (set -o noglob) и настроив часть split на разделение по ; (IFS=';').

3
27.01.2020, 23:12

Вы можете использовать расширение скобок:

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
27.01.2020, 23:12

Теги

Похожие вопросы