왜 재귀가 rm과 함께 위로 올라가지 않습니까? :

나는 일반적으로 재귀의 방향과 rm에 대해 궁금합니다.

rm 재귀는 제대로 작동합니까?

실행 중 : sudo rm -R *.QTFS현재 디렉토리 및 해당 하위의 모든 * .QTFS 파일을 삭제합니까?

에 의해 표시되는 현재 디렉토리 ls -lha에는 더 나은 단어가 없기 때문에 포함 ...링크 가 포함되어 있으므로 디렉토리 트리에서 재귀가 위를 따르지 않는 이유는 무엇입니까? RM 앱에서 인공 제한이 있나요, 또는 .하고 ..실제 일하지?



답변

rm 재귀는 아래로만 제대로 작동합니까?

rm -r x y삭제 xy그 밖에 부모 또는 아무것도를하고 그 안에서 모든 것을 (그들은 디렉토리에있는 경우),하지만.

실행 중 : sudo rm -R *.QTFS현재 디렉토리 및 해당 하위의 모든 * .QTFS 파일을 삭제합니까?

아뇨라는 이름의 모든 파일이 삭제됩니다 *.QTFS, 재귀 적으로 모든 파일 내부 디렉토리 라고 *.QTFS, 그 디렉토리 자체. 다른 삭제 동작을 원하면을 사용하십시오 find -delete.

에 의해 표시되는 현재 디렉토리 ls -lha에는 더 나은 단어가 없기 때문에 포함 ...링크 가 포함되어 있으므로 디렉토리 트리에서 재귀가 위를 따르지 않는 이유는 무엇입니까? RM 앱에서 인공 제한이 있나요, 또는 .하고 ..실제 일하지?

의 인위적인 한도입니다 rm.

인공적인 것은 아니지만 실제로 작동 할 수있는 유일한 방법입니다. rm상위 ..링크를 따를 경우 , 모든 링크를 다시 따라 가면 rm -r시스템의 모든 파일이 제거됩니다 . 컨텐츠를 나열 할 때 각 디렉토리 의 및 항목을 보고 해당 이유로 명시 적으로 무시합니다.../rm...

실제로 시도해 볼 수 있습니다. 실행 rm -r .및 대부분의 rm구현은 오류를 명시 적으로보고하여 작동을 거부합니다.

$ rm -r .
rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘.’

(그 메시지 는 GNU에서 온rm 것이고 다른 것들은 비슷합니다). 명시 적 인수가 아닌 내재적으로 이러한 항목을 발견하면 해당 항목을 무시하고 계속 진행합니다. 이 동작은 POSIX에 필요합니다 . GNU rm와 많은 BSD에서 fts_read계층-통역 함수 패밀리에 의해 자동으로 제공됩니다 .

이나 ...실제 일하지?

.하고 ..있습니다 일반적으로 그 파일 시스템 별이지만, 실제 디렉토리 항목. 거의 항상 모든 사용자 코드에 대한 실제 항목 인 것처럼 표시됩니다. 많은 소프트웨어는 (가 아니라 rm) 런 어웨이 또는 바람직하지 않은 재귀를 포착하거나 방지하기 위해 동작을 특수하게 보여줍니다.


답변

Michael Homer가 작성한 내용뿐만 아니라 실수로 상위 디렉토리로 재귀하기가 어려운 또 다른 요인이 있습니다.

홈 디렉토리로 이동하여 다음과 같이 입력하십시오.

echo *s*

문자 “s”를 포함하는 파일 및 디렉토리 목록이 표시됩니다. 그러나 선행 점으로 시작하는 파일은 표시되지 않습니다. 그것들을 보여주기 위해 다음을 사용할 수 있습니다.

echo .*s*

*이 선행 점을 포함 하여 확장 을 거부하기 때문 입니다. 이것은 다음을 의미합니다.

rm -fr *

로 재귀하지 않습니다 ...