У меня есть несколько странно названных файлов в моих деревьях каталогов, которые путают awk
, как в ответе @AhmetAlpBalkan.Поэтому я выбрал немного другой подход
p=;
while read c;
do
l=${#c};
f=${p:0:$l};
if [ "$f" != "$c" ]; then
echo $c;
fi;
p=$c;
done < <(find . -type d | sort -r)
Как и в решении awk
, я выполняю обратную сортировку.Таким образом, если путь к каталогу - это подпуть предыдущего попадания, вы можете легко распознать это.
Здесь p
- мое предыдущее совпадение, c
- текущее совпадение, l
- длинатекущее совпадение, f
- это первое l
совпадение символов предыдущего совпадения.Я только echo
обращаюсь к тем совпадениям, которые не соответствуют началу предыдущего совпадения.
Проблема с предлагаемым решением awk
состоит в том, что сопоставление начала строки кажется запутанным, еслиимя пути содержит такие вещи, как +
в названии некоторых подкаталогов.Это заставило awk
вернуть мне несколько ложных срабатываний.