Современный find
(через POSIX, поэтому не-GNU find
в OpenBSD поддерживает это) может делать необходимая работа без обращения к xargs
через форму -exec command {} +
.
find ... -exec rm -rf '{}' \+
Вам нужно отделить $ BASE от чисел (1..5), иначе sh интерпретирует то, что вы хотите, как переменную с именем, например. $ BASE1
вместо того, чтобы давать вам значение $ BASE
с добавленным 1
.
Вот исправленная и немного улучшенная версия вашего скрипта.
echo -n "Please enter your base directory name: "
read BASE
mkdir -p "$BASE" "$BASE/$BASE"{1..5}
ls -1d $BASE $BASE/*
Если вы не используете bash, zsh, ksh или любую другую оболочку, поддерживающую {1..5}
, вы можете сделать это вместо этого:
echo -n "Please enter your base directory name: "
read BASE
mkdir -p "$BASE"
for i in 1 2 3 4 5 ; do mkdir -p "$BASE/$BASE$i" ; done
ls -1d $BASE $BASE/*
В bash
я бы сделал:
#!/usr/bin/bash
base="$1" #Get it from the argument, prompts for input aren't very unixy
mkdir -p "$base/$base"{1..5}
ls -d */
В тире
вы не можете использовать {1..5}
, поэтому:
for i in `seq 5`; do mkdir -p "$base/$base${i}"; done