Как найти папки, которые не начинаются с тильды («~»)

Цитата man elf (но вы можете найти ту же информацию из спецификации ELF):

p_offset: Этот член содержит смещение от начала файла, в котором находится первый байт сегмента.

p_filesz: этот член содержит количество байтов в файловом изображении сегмента. Может быть ноль.

p_memsz: этот член содержит количество байтов в образе памяти сегмента. Может быть ноль.

Подведем итог:

  • p_offset - это смещение сегмента в файле ELF;

  • p_memsz - размер сегмента в памяти ;

  • p_filesz - размер сегмента в файле .

Размер файла может быть меньше, чем размер в памяти p_memsz : в этом случае оставшаяся часть сегмента заполняется нулями (в POSIX-подобных системах эта часть равна mmap с использованием MAP_ANONYMOUS ).

Ссылки из GNU ld.so :

Возможно, вас заинтересует код elfcat (инструмент, который я написал), который выгружает данный сегмент в стандартный вывод.

1
04.05.2018, 16:54
3 ответа

Вам нужно использовать опцию -name, чтобы указать, на что проверяется ваше выражение. Для меня работает следующее:

find. -type d ! -name '~*'
0
27.01.2020, 23:23

Тест имени должен пройти нормально:

find. -type d ! -name '~*'
0
27.01.2020, 23:23

Чтобы пропустить папки ./path/to/~dir, но не ./path/to/~dir/subdir, как уже говорили другие, вы можете сделать:

find. ! -name '~*' -type d -print

Если вы также не хотите спускаться в эти папки (и находить там другие папки ), вы должны:

find. -name '~*' -prune -o -type d -print

Это говорит findобрезать ветки, находящиеся в каталогах, имя которых начинается с ~.

Это должно быть в основном¹ функционально эквивалентно вашему:

find. -type d ! -path '*/~*'

За исключением того, что последний не выполняет обрезку, поэтому по-прежнему просматривает эти каталоги, даже если не печатает ни один из них, поэтому он менее эффективен.


¹ есть некоторая разница в том, что первый *в */~*может не совпадать с именами файлов, содержащими недопустимые символы

3
27.01.2020, 23:23

Теги

Похожие вопросы