С последними инструментами GNU (вы уже используете определенные параметры GNU -):
du -S0. |sort -zrn | sed -z 's@[^/]*@.@;5q' | xargs -r0 echo rm -rf
(удалить echo
если устраивает ).
-0
/ -z
позволяют копировать файлы/каталоги с произвольными именами.
Обратите внимание, что большинство rm
реализаций отказываются удалять.
(текущий рабочий каталог ), так что вы можете сделать это на один уровень выше и сделать:
du -S0 dir | sort -zrn | sed -z 's@\s*\d+\s*@@;5q' | xargs -r0 echo rm -rf
Таким образом, он может удалить dir
, если это один из самых больших файлов (обратите внимание, что он также удалит все подкаталоги ). Из ваших требований не ясно, действительно ли это то, что вы хотите.
Теперь, если все, что вам нужно, это удалить 5 самых больших обычных файлов (, исключая другие типы файлов, такие как каталоги, устройства, символические ссылки... ), это просто вопрос использования zsh
и:
echo rm -f./**/*(D.OL[1,5])
(OL
для обратной -сортировки по длине (размеру, а не по использованию диска )).
Есть достаточно простой способ, если
С;
#!/bin/bash
../sub.conf
[ -n "$1" ] && declare "$@" # use arguments to set variables
echo $topic
mosquitto_sub -u $user -P $password -h $server -t $topic
Вы можете сделать;
./sub.sh topic='#'
Пример:
$ bash -c 'foo=1; declare "$@"; echo $baz $foo' _ foo=bar baz=fo
fo bar
Я нашел довольно хороший сайт по созданию скриптов под названием Argbash . Вы передаете ему «шаблон», который создаст для вас каркас сценария. В моем примере создайте файл в домашнем каталоге пользователя ~/sub.conf
со значениями по умолчанию :
topic="#"
user="mqtt"
password="mqttpass"
server="127.0.0.1"
Затем перейдите на страницу создания шаблона argbash и загрузите этот шаблон:
#!/bin/bash
# version="0.1"
#
# This is an optional arguments-only example of Argbash potential
#
# ARG_OPTIONAL_SINGLE([user], [u], [optional argument help msg])
# ARG_OPTIONAL_SINGLE([Password], [P], [optional argument help msg])
# ARG_OPTIONAL_SINGLE([server], [s], [optional argument help msg])
# ARG_OPTIONAL_SINGLE([topic], [t], [optional argument help msg])
# ARG_HELP([The general script's help msg])
# ARGBASH_GO
# [ <-- needed because of Argbash
echo "Value of --user: $_arg_user"
echo "Value of --Password: $_arg_password"
echo "Value of --server: $_arg_server"
echo "Value of --topic: $_arg_topic"
# ] <-- needed because of Argbash
Затем нажмите кнопку «СОЗДАТЬ СЦЕНАРИЙ СЕЙЧАС». Он сгенерирует для вас сценарий, который вы затем сможете скачать. Внутри этого скрипта найдите:
# THE DEFAULTS INITIALIZATION - OPTIONALS
_arg_user=
_arg_password=
_arg_server=
_arg_topic=
Просто измените это на:
# THE DEFAULTS INITIALIZATION - OPTIONALS
. ~/.sub.conf
_arg_user=$user
_arg_password=$password
_arg_server=$server
_arg_topic=$topic
. ~/.sub.conf
загрузит значения из вашего конфигурационного файла в переменные, указанные в этом файле. Следующие строки будут заполнять каждый аргумент командной строки, указанный вами в шаблоне.Любые значения, передаваемые в ваш скрипт, переопределяют эти значения по умолчанию. Вы можете удалить операторы echo "Value of --user: $_arg_user
, если хотите. В самом конце скрипта просто используйте аргументы, такие как:
mosquitto_sub -u $_arg_user -P $_arg_password -h $_arg_server -t $_arg_topic