Прелюдия:
Учитывая отсортированный ввод списка путей / файлов, как найти их общие пути?
В переводе на технический термин, если подать отсортированный ввод из stdin, как выбрать самый короткий правильный префикс из stdin?
Здесь "префикс" имеет нормальное значение, например, строка "abcde" имеет префикс "abc". Вот мой пример ввода
$ echo -e '/home/dave\n/home/dave/file1\n/home/dave/sub2/file2'
/home/dave
/home/dave/file1
/home/dave/sub2/file2
Это пример удаления последующего правильного префикса из стандартного ввода с помощью команды sed
:
$ echo -e '/home/dave\n/home/dave/file1\n/home/dave/sub2/file2' | sed "N; /^\(.*\)\n\1\//D; P; D"
/home/dave/file1
/home/dave/sub2/file2
Вопрос:
Мой вопрос заключается в том, как вместо этого сохранить правильный префикс и удалить все строки, которые имеют этот префикс. Так как оба /home/dave/file1
и /home/dave/sub2/file2
имеют префикс /home/dave
, /home/dave
будет сохранен, а два других - нет. То есть, это будет полностью противоположно тому, что делает вышеуказанная команда sed
.
Больше информации:
- Вход будет уже отсортирован
- Если у меня есть
/home/dave /home/dave/file1 /home/phil /home/phil/file2
(echo -e '/home/dave\n/home/dave/file1\n/home/dave/sub2/file2\n/home/phil\n/home/phil/file2'
), я ожидаю, что ответом будут/home/dave
и/home/phil
.
Заявка:
У меня есть два тома диска с похожим содержанием. Я хочу скопировать то, что есть в v1, но отсутствует в v2, на другой том диска, v3. Используя find
, sort
и comm
, я могу получить список того, что копировать, но мне нужно еще кое-что почистить. Т.е., пока у меня есть /home/dave
в списке, мне не нужны другие два.
Спасибо!