Создавать папки на основе файлового контента - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть текстовый файл, подобный этому:

f1 3
f2 4
f3 2

Я должен создать папку (директорию) в bash с именем f1 и с 3 подпапками со случайными именами, затем папку с именем f2 и с 4подпапки со случайными именами и т. д.

Я предпринял следующую попытку, но она создает только папки без подпапок.

#!/bin/bash

dir=/home/bae/Desktop/egzamin/5
filename=$dir/nazwy.txt

cut -d " " -f 1 $fi

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019
while read dir count
do
    # some sanity checks
    [[ $dir = "" || $count = "" ]] && continue
    ((count<0)) && continue

    mkdir -p "$dir" # only needed for count==0
    for (( i=0; i<count; i++ ))
    do 
        mkdir -p "$dir/$RANDOM-$i"
    done
done < TEXTFILE
0 голосов
/ 12 февраля 2019

То, что вы ищете, выглядит примерно так:

while read -r dirname count; do
   mkdir -p "$dirname"
   for (( i=0; i < $count; ++i)); do mktemp -d -p "$dirname"; done
done < textfile

Это читает строки вашего файла построчно, читая два аргумента dirname и count.Сначала он создаст родительский каталог, а затем запустит цикл для создания запрошенных подкаталогов, используя mktemp.Посмотрите на man mktemp для различных опций манипулирования именами подкаталогов.

примечание: если в вашем текстовом файле есть возможные «пустые» строки или неправильные записи, вы можетехотите включить проверки работоспособности от Wiimm .

0 голосов
/ 12 февраля 2019
<txt xargs -l sh -c 'mkdir "$1"; cd "$1"; mkdir $(seq "$2" | xargs -l sh -c "echo \$RANDOM")' --
  • <txt - ввести содержимое из файла с именем txt на стандартный ввод команды
  • xargs -l - запустить команду для каждой строки, минуя строку какаргументы команды
  • mkdir "$1" - создает каталог и cd в него из первого столбца файла
  • seq "$2" - выводит последовательно увеличивающиеся числа от 1 до числа во второмстолбец, переданный в качестве второго аргумента
  • xargs -l sh -c "echo \$RANDOM" - просто ярлык для вывода случайного числа для каждой строки ввода.
  • cd "$1"; mkdir $(....) - создает файлы внутри папки
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...