如何从字符串数组创建子目录?

时间:2019-03-25 11:44:04

标签: bash

我创建了一个随机字符串数组,其大小为 n。,并提供了一定的输入(水平或深度)。

我想创建一个子目录结构,例如arr=(a 32ae frew qw3 gt2 ffrghaw dwe),在第4级,我想创建a/32ae/frew/qw3

我正在尝试访问数组,但无法获得正确的结果。

#!/bin/bash

if [ "$2" -lt 0 ];
then
    echo "<Num of files must be zero or positive number!>"
    exit 1
fi

if [ "$3" -lt 0 ];
then
    echo "<Num of directories must be zero or positive number!>"
    exit 1
fi

if [ "$4" -lt 0 ];
then
    echo "<Levels must be zero or positive number!>"
    exit 1
fi

dir=$1

if [ ! -d "$dir" ];
then
    mkdir -p "$dir"
else
    echo "<Directory $dir exists!>"
fi

num_of_files=$2
num_of_dirs=$3
leves=$4
arr=()

for(( i=0; i<"$num_of_dirs"; i++ ))
do 
    random_num=$(( 1 + RANDOM % 8 ))
    string=$(cat /dev/urandom | LC_CTYPE=C tr -dc 'a-zA-Z0-9' | fold -w "$random_num" | head -n 1)
    arr=("${arr[@]}" "$string")
    mkdir -p $dir/"$string" && touch $dir/"$string"/aek.txt

    #echo "$string"
done


echo ${arr[0]}...${arr[3]}
echo

我得到类似a/{232[1]}a/{ae[1],ae[2],ae[3]}

1 个答案:

答案 0 :(得分:0)

我不太确定这些参数应该代表什么,但是如何简化呢?

tree=$(LC_CTYPE=C tr -dc 'a-zA-Z0-9' </dev/urandom |
    fold -w 8 |
    head -n 4 |
    tr '\n' /)
mkdir -p "$tree" && touch "$tree"aek.txt

作为一项额外的奖励,它不需要任何仅Bash功能。

这很可能会创建所有8个字符长的目录名称。如果这是一个问题,则可以添加一个片段以一定的概率缩短其中的一些片段。也许用tr -d随机选择一些字母来从生成的字符串中删除?