От простого контроля это не ошибка дизайном...
echo "bar" -n | md5sum
a3f8efa5dd10e90aee0963052e3650a1
Попробуйте эту команду за себя:
echo "bar -n" | md5sum
Вы заметите, что получающийся md5
a3f8efa5dd10e90aee0963052e3650a1
Вы просто запутавшийся использование-n в эхе.
В Вашем первом примере кода
echo -n "bar" | md5sum
- n используется для высказывания, НЕ ДЕЛАЮТ для помещения новой строки после этого эха.
Ваш второй образец
echo "bar" -n | md5sum
рассматривает-n как буквенный текст.
Эта команда выбирает каждого путь и усекает его к n
папки глубоко (определенный в \{0,n\}
раздел sed
команда и {0,n}
раздел команды grep). Это затем передается по каналу в uniq
отфильтровывать дубликаты.
rsync -nPaAXz src_dir dst_dir | sed -n 's@^\(\([^/][^/]*/\)\{0,2\}\).*@\1@p' | uniq
То же самое может также быть достигнуто с помощью grep
:
rsync -nPaAXz src_dir dst_dir | grep -oE "^([^/]+/){0,2}"
Хотя вышеупомянутая работа привычки с GNU grep
версии < 2.5.3
из-за ошибки.
Следующий grep ограничит подробный вывод rsync глубиной 2 папок:
rsync -nPaAXz src_dir dst_dir | grep -E '^/?([^/]+/?){0,2}$'
Изменитесь {0,2}
выше к {0,3}
отфильтровывать 3 папки глубоко. {0,4}
отфильтрует 4 папки глубоко и т.д.
{0,2}
нашел бы минимум ни одного максимум с 2 для шаблона ([^/]+/?)
. Подлинный вопрос.
– kayleeFrye_onDeck
30.07.2016, 02:37
В этом случае Вы просто хотите отфильтровать вывод, и Вы на самом деле не заботитесь о многократном использовании значений всегда. Это легко, затем: просто grep строки, которые содержат больше наклонных черт, чем Вы, хотят.
rsync -nPaAXz src_dir dst_dir | cut -d "/" -f 1-4 | awk '!x[$0]++'
cut удаляет все после путей глубиной в 4 папки, а awk удаляет дубликаты.