Меня интересует направление рекурсии вообще и т. Д.
rm рекурсия работает только правильно?
Запуск: sudo rm -R *.QTFS
удалит все файлы * .QTFS в текущем каталоге и его дочерних элементах, правильно?
текущий каталог, выдаваемые ls -lha
также содержит .
и ..
ссылки на отсутствие лучшего слова, так почему бы не рекурсии следовать этим вверх в дереве каталогов? Есть ли предел искусственного на ют приложения, или .
и ..
не реальные вещи?
Ответы:
rm -r x y
удалитx
иy
и все внутри них (если они каталоги), но не их родителей или что-то вне их.Нет. Он удалит все названные файлы
*.QTFS
, все файлы, которые рекурсивно находятся в вызываемых каталогах*.QTFS
, и сами эти каталоги. Если вы хотите другое поведение удаления, используйтеfind -delete
.Это искусственный предел
rm
.Хотя на самом деле это не так уж и искусственно - это единственный способ, которым он может когда-либо работать. Если
rm
перейти по родительским..
ссылкам, каждый изrm -r
них удалит все файлы в системе, следуя всем..
ссылкам вплоть до/
.rm
видит..
и.
записи в каждой директории , когда он перечисляет содержимое, и явно пренебрегает их по этой причине.Вы можете попробовать это сами, на самом деле. Выполните,
rm -r .
и большинствоrm
реализаций откажутся действовать, явно сообщив об ошибке:(это сообщение от GNU
rm
; другие похожи). Когда он встречает эти записи неявно, а не как явные аргументы, он просто игнорирует их и продолжает работу. Такое поведение требуется POSIX . В GNUrm
и многих BSD он автоматически предоставляетсяfts_read
семейством функций обхода иерархии..
и..
являются в основном записями реального каталога, хотя это файловая система конкретный. Они почти всегда будут отображаться так, как будто они являются реальными записями для всего кода пользователя, независимо от того, Многие части программного обеспечения (а не толькоrm
) специально описывают свое поведение, чтобы поймать или предотвратить побег или нежелательную рекурсию.источник
fts_read
реализации, однако, только для аргументов командной строки.rm
даже не видит,*.QTFS
потому что он развернут глобально в имена файлов с помощью bash, прежде чем вызывается двоичный файл rm. Ответ @ tobyink отмечает это..
и..
особые случаи поведения, как говорят, являются причиной существованияПомимо того, что написал Майкл Гомер, есть еще один фактор, который затрудняет случайный возврат в родительский каталог.
Зайдите в свой домашний каталог и введите что-то вроде:
Вы увидите, что он показывает список файлов и каталогов, содержащих букву «s». Однако файлы, начинающиеся с начальной точки, не отображаются. Чтобы показать их, вы можете использовать:
Это потому, что оболочка отказывается расширяться,
*
чтобы охватить ведущую точку. Это означает, что:Не вернется в
..
.источник