Проблема в том, что вы назначаете команду переменной. |
больше не анализируется как "оператор" канала, а как обычная строка.
# echo 123 | cat
123
# a="echo 123 | cat"
# $a
123 | cat
|
является недопустимым аргументом для find
, поэтому он возвращает ошибку.
Используйте функцию:
rsync_com() {
find ./copy1 -mtime +14 -printf %P\\0 |
rsync -avc --dry-run --files-from=- --from0 ./copy1 /home/shlo/copy1/
}
output=$(rsync_com 2>&1)
Не забывайте всегда заключать в кавычки расширения переменных. И никогда не запускайте команду, созданную раскрытием неэкранированной переменной.
Соглашение состоит в том, что переменные верхнего регистра зарезервированы для экспортируемых переменных.