Перезагрузка системы решила проблему. Я чувствую себя подобно, возможно, что это - очевидный ответ, но в Linux, столько системных изменений вступает в силу сразу или по крайней мере когда пользователь выходит и заходит. Это конкретное изменение, однако, потребовало перезагрузки.
Можно сделать это со сценарием оболочки.
Чистый sh - это будет работать даже над оболочками Bourne предPOSIX:
n=1;
max=50;
while [ "$n" -le "$max" ]; do
mkdir "s$n"
n=`expr "$n" + 1`;
done
Если Вы хотите создать высокое количество каталогов, можно сделать сценарий быстрее путем сокращения его до единственного вызова mkdir
а также использование оболочки builtins для тестирования и арифметики. Как это:
n=1
max=50
set -- # this sets $@ [the argv array] to an empty list.
while [ "$n" -le "$max" ]; do
set -- "$@" "s$n" # this adds s$n to the end of $@
n=$(( $n + 1 ));
done
mkdir "$@"
Zsh, ksh93 или удар делают это намного легче, но я должен указать, что это не создается в mkdir
и может не работать в других оболочках. Для больших случаев это может также быть затронуто пределами на число или общий размер аргументов, которые могут быть переданы команде.
mkdir s{1..50}
Один
for i in {1..50}; do
mkdir s"$i"
done
Два
mkdir s{1..50}
Эта опция работает в ударе, zsh и ksh93
Три
mkdir $(printf "s%02i " $(seq 1 50))
$i
чем просто делают каталог, например, mkdir s$i ; echo $i > s$i/$i
. Кроме того, Каждый - хороший, простой пример использования для цикла в ударе... на сайте как это, это нисколько не маловероятно для неопытного пользователя видеть его и думать "хорошее, я не понял, что Вы могли сделать это"---> просвещение.
– cas
21.09.2012, 05:47
Много сложных ответов здесь, но удар делает это действительно легким. Несомненно, чистые работы решения POSIX, но почему бы не использовать в своих интересах bash
оболочка Вы используете, во всяком случае? Можно сделать это легко с расширением фигурной скобки:
% mkdir -v s{1..10} && ls -1d s{1..10} (09-24 17:37)
mkdir: created directory `s1'
mkdir: created directory `s2'
mkdir: created directory `s3'
mkdir: created directory `s4'
mkdir: created directory `s5'
mkdir: created directory `s6'
mkdir: created directory `s7'
mkdir: created directory `s8'
mkdir: created directory `s9'
mkdir: created directory `s10'
s1
s10
s2
s3
s4
s5
s6
s7
s8
s9
mkdir $(seq --format 's%.0f' 1 50)
или если бы Вы хотите дополненные нулем числа (который был бы лучше для сортировки):
mkdir $(seq --format 's%02.0f' 1 50)
или:
mkdir s$(seq -s ' s' -w 1 50)
- отметьте строку' незадолго до $()
, без него первый созданный каталог будет всего '01', а не 's01'
и, наконец: mkdir $(printf "s%02i " $(seq 1 50))
seq
от GNU Coreutils
странно, seq's --format
или -f
опция только позволяет двойные типы printf с плавающей точкой (как f и g. также странный шестнадцатеричный формат с плавающей точкой, что я никогда не находил использования для). Я понятия не имею почему. Было бы хорошо, если бы это также поддерживало другой printf(3)
числовые типы как целое число (d, i), восьмеричный (o, U) или шестнадцатеричное число (x, X).
Так или иначе, двойной формат с 0 десятичной точностью как %.0f
или %02.0f
достаточно близко к целому числу с этой целью.
$ seq --help Usage: seq [OPTION]... LAST or: seq [OPTION]... FIRST LAST or: seq [OPTION]... FIRST INCREMENT LAST Print numbers from FIRST to LAST, in steps of INCREMENT. -f, --format=FORMAT use printf style floating-point FORMAT -s, --separator=STRING use STRING to separate numbers (default: \n) -w, --equal-width equalize width by padding with leading zeroes --help display this help and exit --version output version information and exit If FIRST or INCREMENT is omitted, it defaults to 1. That is, an omitted INCREMENT defaults to 1 even when LAST is smaller than FIRST. FIRST, INCREMENT, and LAST are interpreted as floating point values. INCREMENT is usually positive if FIRST is smaller than LAST, and INCREMENT is usually negative if FIRST is greater than LAST. FORMAT must be suitable for printing one argument of type `double'; it defaults to %.PRECf if FIRST, INCREMENT, and LAST are all fixed point decimal numbers with maximum precision PREC, and to %g otherwise.
См. также: http://www.gnu.org/software/coreutils/manual/html_node/seq-invocation.html
Только, чтобы отличаться, вот является POSIX sh решением, которое использует рекурсию:
makedirs() {
[ "$1" -gt 0 ] || return
mkdir "s$1"
makedirs $(( $1 - 1 ))
}
$ makedirs 9
$ ls
s1 s2 s3 s4 s5 s6 s7 s8 s9
n=$(( n + 1 ))
был бы так же, как строго POSIX и не будет стоить Вам подоболочки. ответ – kojiro 21.09.2012, 08:04[[
ключевым словом не является POSIX. (Не говоря уже о том, что[
оболочка, встроенная во многих современных оболочках.) – kojiro 21.09.2012, 15:03[[
продолжает работать мойksh88
(который предшествуетbash
) таким образом, я предположил, что это был POSIX. Я не мог найти упоминание о нем в спецификации POSIX, таким образом, я полагаю, что Вы правы. Спасибо за информацию! – rahmu 21.09.2012, 15:23for i in {range}
для пользователей усовершенствованных оболочек. – Random832 21.09.2012, 17:50