Как создать каталоги имени каждого месяца?

Оба варианта выполняются с помощью команды iptables .

Во-первых, отключите входящий доступ по умолчанию. Примечание: НЕ вводите это в командной строке, если вы подключены через ssh или что-то подобное, потому что вы заблокируете себя.

iptables -P INPUT DROP

Затем разрешите уже установленные соединения:

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Наконец, откройте порты, к которым вы хотите разрешить доступ; например, для HTTP:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

повторить для других портов.

Чтобы получить перевод порта, вам нужно использовать таблицу nat :

iptables -t nat -A prerouting -p tcp --dport 80 -j REDIRECT --to-port 8080
8
11.08.2018, 04:28
6 ответов

С -Ixargsполучает один аргумент на строку, в отличие от значения по умолчанию, когда один аргумент на (пробел или символ новой строки с разделителями, возможное )слово в кавычках без-I(и подразумевает-n). Таким образом, в вашем примере dateвызывается только один раз с {}, расширенным до всего вывода echo(, который находится в одной строке ), за вычетом завершающей новой строки.

Здесь вы можете (отметить, что -dявляется расширением GNU):

printf '%s\n' {1..12}/01 | xargs -I {} date -d {} +%b | xargs mkdir --

(обратите внимание, что это не будет работать корректно в локалях, где аббревиатуры названий месяцев содержат пробелы или символы кавычек; с GNU xargsвы можете обойти это, используяxargs -d '\n' mkdir --)

Теперь, чтобы получить список аббревиатур месяцев в вашей локали, более целесообразно напрямую запрашивать локаль:

(IFS=';'; set -o noglob; mkdir -- $(locale abmon))

(см. также locale -k LC_TIME, чтобы увидеть все данные локали в категории LC_TIME).

Или изначально вzsh:

zmodload zsh/langinfo
mkdir -- ${(v)langinfo[(I)ABMON_*]}

По крайней мере, в системах GNU в некоторых регионах сокращения месяцев дополняются пробелами до фиксированной ширины:

$ LC_ALL=et_EE.UTF-8 locale title abmon
Estonian locale for Estonia
jaan ;veebr;märts;apr  ;mai  ;juuni;juuli;aug  ;sept ;okt  ;nov  ;dets
$ LC_ALL=zh_TW.UTF-8 locale title abmon
Chinese locale for Taiwan R.O.C.
 1月; 2月; 3月; 4月; 5月; 6月; 7月; 8月; 9月;10月;11月;12月

Вы можете удалить этот отступ.

Начальные пробелы будут удалены с помощью xargs -I, но не конечные. Сzsh:

zmodload zsh/langinfo
set -o extendedglob
mkdir -- ${${${(v)langinfo[(I)ABMON*]}##[[:space:]]#}%%[[:space:]]#}
17
27.01.2020, 20:08

Попробовать цикл?

$ for m in {1..12}; do
> date -d "$m"/01 +%b
> done
jan
feb
mar
apr
maj
jun
jul
aug
sep
okt
nov
dec

Если вы хотите создать каталог для каждого месяца, я бы сделал что-то вроде:

for m in {1..12}; do newdir=$(date -d "$m"/01 +%b); mkdir "$newdir"; done
9
27.01.2020, 20:08

Ваша команда не работает, так как использование -Iизменяет разделитель xargs:

-I replace-str
Replace occurrences of replace-str in the initial-arguments with names read from standard input. Also, unquoted blanks do not terminate input items; instead the separator is the newline character.

Вы можете добавить -d " "к xargs, чтобы заставить его работать. Но вам даже не нужно -I{}в вашем случае:

Попробуйте это,

echo {1..12}/01 | xargs -n1 date +%b -d | xargs mkdir
5
27.01.2020, 20:08

В оболочках с раскрытием скобок и датой, принимающей ввод DATAFILE, попробуйте

echo {01..12}/01$'\n' | date -f- +"mkdir %b"

и передать в оболочку, если результат вас устраивает.

5
27.01.2020, 20:08

Самый простой и надежный способ сделать это:

mkdir jan feb mar apr maj jun jul aug sep okt nov dec

В конце концов, это статический список месяцев...

Если вы намерены использовать GNUdate(здесь, предполагая немодифицированный $IFSи GNU date, как для вашегоdate -d):

mkdir $( printf '%s\n' {1..12}/01 | date -f - +%b )
1
27.01.2020, 20:08

Ты был так близко.

Проблема в том, что echo создает одну строку 1/01 2/01 3/01 4/01 5/01 6/01 7/01 8/01 9/01 10/01 11/01 12/01, а xargs использует символ новой строки в качестве разделителя полей (, а не пробел ).

Решение :Приказать эхо поставить пробел между каждым полем.

echo -e {1..12}/01\\n | xargs -n 1 -I {} date -d {} +%b

Я вставил только \\nв конце эха.

Затем, чтобы каталоги добавлялись|xargs mkdir

напр.

echo -e {1..12}/01\\n | xargs -n 1 -I {} date -d {} +%b | xargs mkdir

3
27.01.2020, 20:08

Теги

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