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

Я использую 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 удаляет дубликаты.

  • Редактирование вложенного текста и определенных строк в файле с использованием сценария bash
  • обратный порядок абзацев в файле
  • Удалить последнюю запятую из строки bash для созданной петли строки
  • Проблема с sed в массиве, содержащем строки, содержащие пробелы
  • извлекать строки из файла на основе последовательной пары шаблонов и выводить на отдельные файлы
  • Удалить целую строку, если после ":" меньше 4 символов
  • Как использовать + в регулярном выражении в sed?
  • Как заменить многострочный код на sed?
  • удаление пробелов из первого столбца
  • Удалить строки, начинающиеся с #
  • Сравните два столбца файла
  • Linux и Unix - лучшая ОС в мире.