Существуют ли какие-либо «вспомогательные» сценарии для помощи в загрузке/переопределении аргументов команды?

С последними инструментами 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для обратной -сортировки по длине (размеру, а не по использованию диска )).

0
13.06.2019, 15:09
2 ответа

Есть достаточно простой способ, если

  1. Вы используете bash, ksh или аналогичные расширенные оболочки
  2. Вы немного изменили предполагаемый синтаксис.

С;

#!/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
1
28.01.2020, 02:22

Я нашел довольно хороший сайт по созданию скриптов под названием 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
2
28.01.2020, 02:22

Теги

Похожие вопросы