rm
рекурсия работает только правильно?
rm -r x y
удалит x
и y
и все внутри них (если они каталоги), но не их родителей или что-то вне их.
Запуск: sudo rm -R *.QTFS
удалит все файлы * .QTFS в текущем каталоге и его дочерних элементах, правильно?
Нет. Он удалит все названные файлы *.QTFS
, все файлы, которые рекурсивно находятся в вызываемых каталогах*.QTFS
, и сами эти каталоги. Если вы хотите другое поведение удаления, используйте find -delete
.
текущий каталог, выдаваемые ls -lha
также содержит .
и ..
ссылки на отсутствие лучшего слова, так почему бы не рекурсии следовать этим вверх в дереве каталогов? Есть ли предел искусственного на ют приложения, или .
и ..
не реальные вещи?
Это искусственный предел rm
.
Хотя на самом деле это не так уж и искусственно - это единственный способ, которым он может когда-либо работать. Если rm
перейти по родительским ..
ссылкам, каждый из rm -r
них удалит все файлы в системе, следуя всем ..
ссылкам вплоть до /
. rm
видит ..
и .
записи в каждой директории , когда он перечисляет содержимое, и явно пренебрегает их по этой причине.
Вы можете попробовать это сами, на самом деле. Выполните, rm -r .
и большинство rm
реализаций откажутся действовать, явно сообщив об ошибке:
$ rm -r .
rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘.’
(это сообщение от GNUrm
; другие похожи). Когда он встречает эти записи неявно, а не как явные аргументы, он просто игнорирует их и продолжает работу. Такое поведение требуется POSIX . В GNU rm
и многих BSD он автоматически предоставляется fts_read
семейством функций обхода иерархии.
или .
и ..
не настоящие вещи?
.
и ..
являются в основном записями реального каталога, хотя это файловая система конкретный. Они почти всегда будут отображаться так, как будто они являются реальными записями для всего кода пользователя, независимо от того, Многие части программного обеспечения (а не только rm
) специально описывают свое поведение, чтобы поймать или предотвратить побег или нежелательную рекурсию.