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

Я использую rsync и флаги -nPaAXz ~/ чтобы проверить, какие файлы будут скопированы.

Это слишком многословно, чтобы понять.

Как я могу отфильтровать вывод, поэтому я просматриваю список файлов / папок, которые будут скопированы на определенную глубину, например:

1 папка в глубину

 /home/afile /home/afolder/ /home/anotherfolder/ 

2 папки в глубину

 /home/afile /home/afolder/afile /home/afolder/anotherfile /home/afolder/afolder/ /home/anotherfolder/afile 

4 Solutions collect form web for “Фильтрация путей на определенную глубину”

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

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

Измените {0,2} выше на {0,3} чтобы отфильтровать 3 папки в глубину. {0,4} будет отфильтровывать 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 из-за ошибки .

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

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

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

  • объединить два файла csv на основе условия
  • раскол столбца после n-го символа
  • Извлечение столбца из текста, разделенного запятыми.
  • Разбор C-стиля Многострочный комментарий
  • awk + как захватить адрес электронной почты между символами
  • Регулярное изменение / оператор (foo | bar) в GNU или BSD Sed
  • Объединить следующую строку с предыдущей строкой
  • Используя sed, чтобы заменить только первые два регулярных выражения с разными строками
  • Не запускать этот sed при сопоставлении строки?
  • копировать и вставлять текст с конца строки
  • Нужна некоторая sed magic: перемещение выделенных строк в начало файла
  • Использование sed для замены пробелов в текстовых файлах _ только тогда, когда между "" после определенной строки
  • Interesting Posts

    разрешить создание сетей внутри тюрьмы freebsd

    Установка репозитория Epel на CentOS не выполняется

    Принудительное ssh не печатать предупреждения

    Почему tmux не подбирает переменные, полученные в моем tmux.conf?

    Gnome 3.22: отключить переключение клавиатуры клавиатуры + + shift

    Как определить, экспортированы ли переменные оболочки или нет?

    Как предотвратить `git difftool` от вызова другого` vimdiff`?

    Можно ли просмотреть информацию о пакете с терминала перед ее установкой?

    Что такое регулярное выражение в этой установке пакета?

    Как перенаправить несколько портов в конфигурацию SSH с помощью LocalForward?

    Вычисления даты без инструментов GNU

    Удалить маршрут из таблицы маршрутизации по положению

    Не удается разрешить все имена после подключения к VPN

    В Kali через VirtualBox, как я могу настроить два адаптера ethernet с помощью GUI?

    Идентичные точки монтирования для двух файловых систем при установке Linux

    Linux и Unix - лучшая ОС в мире.