Вы не можете удалить огромное количество файлов, используя rm
. Вы можете либо
find u/ -type f -print0 | xargs -r -0 rm -f
это приведет к удалению только файлов; чтобы удалить все, используйте
find u/ -print0 | xargs -r -0 rm -rf
вы, вероятно, можете использовать опцию --delete
для find
, если она есть в вашей системе:
find u/ -type f --delete
или фанковый метод сrsync
:
mkdir emptyfolder
rsync -r --delete emptyfolder/ u/
rsync
намного быстрее, чем rm
при удалении вещей, поскольку он обходит некоторые проверки.
Вы можете построить команду в виде массива:
#!/bin/bash
var=ON
cmd=( /home/username/myscript ) # create array with one element
if [ "$var" == "ON" ]; then
cmd+=( -a ) # append to the array
fi
cmd+=( -b 76 ) # append two elements
Затем запустите его с помощью:
"${cmd[@]}"
Обратите внимание на кавычки вокруг последней части и круглые скобки вокруг назначений выше. Синтаксис уродлив, но он работает с аргументами, содержащими пробелы и тому подобное. (Используйте кавычки для добавления аргументов с пробелами, например.cmd+=("foo bar")
)
Связанные, с менее уродливыми методами и способами, которыми они могут потерпеть неудачу:
В простых случаях, таких как этот один необязательный аргумент здесь, вы можете обойтись без раскрытия альтернативного значения:
var=x
myscript ${var:+"-a"} -b 76
Здесь ${var:+foo}
вставляет foo
, если var
не пусто (, поэтому var=ON
, var=FALSE
, var=x
все вставят его ), и ничего, если оно пусто или не установлено(var=
или unset var
). Будьте осторожны с обычными вопросами цитирования.
Если я правильно вас понял:
var=ON
if [ "$var" = "ON" ]; then
/home/username/myscript -a -b 76
else
/home/username/myscript -b 76
fi