Фильтрация путей к определенной глубине

От простого контроля это не ошибка дизайном...

echo "bar" -n | md5sum

a3f8efa5dd10e90aee0963052e3650a1

Попробуйте эту команду за себя:

echo "bar -n" | md5sum

Вы заметите, что получающийся md5

a3f8efa5dd10e90aee0963052e3650a1

Вы просто запутавшийся использование-n в эхе.

В Вашем первом примере кода

echo -n "bar" | md5sum

- n используется для высказывания, НЕ ДЕЛАЮТ для помещения новой строки после этого эха.

Ваш второй образец

echo "bar" -n | md5sum

рассматривает-n как буквенный текст.

2
09.03.2011, 05:10
4 ответа

Эта команда выбирает каждого путь и усекает его к 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 из-за ошибки.

3
27.01.2020, 21:51

Следующий grep ограничит подробный вывод rsync глубиной 2 папок:

rsync -nPaAXz src_dir dst_dir | grep -E '^/?([^/]+/?){0,2}$'

Изменитесь {0,2} выше к {0,3} отфильтровывать 3 папки глубоко. {0,4} отфильтрует 4 папки глубоко и т.д.

3
27.01.2020, 21:51
  • 1
    Большой ответ, Спасибо! я думаю, что идеальное решение должно было бы быть более сложным все же. С этим решением, если бы конкретная папка не имела никаких файлов на соответствующей глубине или более мелкий, путь был бы отфильтрован полностью grep. То, что Вы хотели бы, для каждого пути, чтобы быть усеченным на корректную глубину и затем не распечатать любые дублирующиеся пути. Необходимо ли было бы, возможно, использовать awk, чтобы сделать это? –  Acorn 08.03.2011, 23:27
  • 2
    Где в этом ответе обращенная глубина? {0,2} нашел бы минимум ни одного максимум с 2 для шаблона ([^/]+/?). Подлинный вопрос. –  kayleeFrye_onDeck 30.07.2016, 02:37

В этом случае Вы просто хотите отфильтровать вывод, и Вы на самом деле не заботитесь о многократном использовании значений всегда. Это легко, затем: просто grep строки, которые содержат больше наклонных черт, чем Вы, хотят.

1
27.01.2020, 21:51
rsync -nPaAXz src_dir dst_dir | cut -d "/" -f 1-4 | awk '!x[$0]++'

cut удаляет все после путей глубиной в 4 папки, а awk удаляет дубликаты.

1
27.01.2020, 21:51

Теги

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