Изначальная задача.
Есть много каталогов (более миллиона). Некоторые из них необходимо удалить со всем содержимым около (400 тыс.). Есть список с именами каталогов, но без путей.
Вот так получаю все каталоги
find /root/test1/dir $pwd -type d |sort |uniq > 1.tmp
на выходе файл 1.tmp
Необходимо сравнить файлы таким образом, что бы на выходе сформировать файл в котором останутся пути в которых не встречается комбинация цифр из 2.tmp
Из примера выше это:
можно обойтись одним find-ом:
$ find /root/test1/dir $pwd -regextype posix-egrep -type d -not -regex ".*/(11|13)"
p.s. если исключений (в файле 2.tmp) — порядка десятков/сотен, то, чтоб вручную их не набивать, можно последний элемент так примерно написать:
… -regex ".*/($(cat 2.tmp | sed -rn '$!H;${G;s/\n+/|/g;p}'))"
правда, если исключений тысячи, этот вариант, боюсь, может не прокатить.
можно обойтись одним find-ом:
$ find /root/test1/dir $pwd -regextype posix-egrep -type d -not -regex ".*/(11|13)"
p.s. если исключений (в файле 2.tmp) — порядка десятков/сотен, то, чтоб вручную их не набивать, можно последний элемент так примерно написать:
… -regex ".*/($(cat 2.tmp | sed -rn '$!H;${G;s/\n+/|/g;p}'))"
правда, если исключений тысячи, этот вариант, боюсь, может не прокатить.
ну вынесите из кавычек конструкцию $(…)
только пихать сотню тысяч записей в командную строку, конечено, нет смысла. делайте конвейером, варианты вам тут уже расписали,