我创建了一个随机字符串数组,其大小为 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]}
答案 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
随机选择一些字母来从生成的字符串中删除?