$ rm_if_link(){ [ ! -L "$1" ] || rm -v "$1"; }
#test
$ touch nonlink; ln -s link
$ rm_if_link nonlink
$ rm_if_link link
removed 'link'
Команда выдает ошибку «пустой» архив, потому что вы ничего не передаете в tar для сжатия.
При использовании -f
после должно идти имя архива для создания и только потом архивы для сжатия (в вашем случае каталог ).
Для отправки на стандартный вывод для подачи в канал следует использовать фиктивную опцию/ярлык "-"
Как в:
tar -czf - Pictures | base64 | nc remote_host 443
Как также правильно указывает @muru, вывод tar на стандартный вывод по умолчанию, так что другой вариант, если убрать " -f".
tar -cz Pictures | base64 | nc remote_host 443
nc
также в теории также хорошо способен обрабатывать двоичные файлы, когда они не отправляются на консоль, вы можете обойтись без дополнительного шага кодирования и декодирования base64. Я, конечно, делал это тысячи раз, не используя base64.
Я бы также предпочел использовать nc
без -v для сценариев на удаленной стороне, как в:
tar -czf - Pictures | nc remote_host 443
nc -lp 443 > secret.tgz # remote host