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

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

  • Проблема удаления / замены специального символа °
  • Задача сравнения регулярных выражений / шаблонов для извлечения данных
  • Проблема с вставкой новой строки между странными html-символами в html-файле - UTF-8
  • Переименование нескольких файлов с помощью sed
  • Sed: Заменить N первых вхождений персонажа
  • Почему sed действует по-разному в зависимости от выходного файла?
  • Как заменить текст после определенного слова с помощью sed?
  • Удалите строки, которые не начинаются с шаблона из заданного набора паттернов
  • Я хочу найти дубликаты в файле и добавить символ в конец строки в первом совпадении
  • Заменить запятые для строк в двойных кавычках
  • Как найти слово в файле и вставить текст на две строки ниже?
  • Linux и Unix - лучшая ОС в мире.