Я хочу создать десять папок с именами foo1java , foo2c , foo3python и т.д.

Я пробовал это, но он создает слишком много каталогов:

mkdir foo{1..3}{java,c,python}

foo1c/     foo1python/  foo2java/    foo3c/     foo3python/
foo1java/  foo2c/       foo2python/  foo3java/

Я просто хочу сопоставить числа с языками: от 1 до java , от 2 до c , от 3 до python и т.д.

Как бы я поступил так?

5 ответов5

5
i=1; for j in java c python; do mkdir foo${i}${j}; i=$((i+1)); done

дает каталоги

foo1java
foo2c
foo3python

Чтобы добавить больше языков, просто продолжайте заполнять список слов после python разделенными пробелами объектами. Целочисленный счетчик будет поддерживать.


Дополнение: "Bashier" (но не лучше, поэтому я бы предпочел вышеупомянутое решение, поскольку оно более переносимо (хотя в этом случае это, вероятно, не имеет значения)):

list=(java c python); i=1; while [ $i -lt ${#list} ]; do mkdir foo${i}${list[i-1]}; let i++; done

Просто заполните list массивов большим количеством записей, как и раньше.

4

Это статическое отображение, так что разберитесь с этим.

mkdir foo{1java,2c,3python}
0

Это может работать для вас:

parallel --xapply mkdir foo{1}{2} ::: {1..3} ::: {java,c,python}
0

Другой возможный способ (Баш)

  arr=(java c python); for((i = 1; i <= ${#arr[@]}; i++)); do mkdir foo${i}${arr[i-1]} ; done
0

Нет зацикливания ...

paste <( printf '%s\n' foo{1..3} ) \
      <( printf '%s\n' java c python ) |tr -d '\t' | xargs mkdir -p

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .