일반적인 재귀 방향과 구체적인 rm 방향을 알고 싶습니다.
rm 재귀는 아래쪽으로만 작동합니다. 맞나요?
실행 중: sudo rm -R *.QTFS
현재 디렉터리와 그 하위 디렉터리에 있는 모든 *.QTFS 파일이 삭제됩니다. 그렇죠?
표시된 현재 디렉토리에는 더 나은 단어가 없기 때문에 및 링크 ls -lha
도 포함되어 있는데 왜 재귀가 디렉토리 트리에서 이러한 위쪽을 따르지 않습니까? rm 앱에 인위적인 제한이 있나요, 아니면 둘 다 진짜인가요?.
..
.
..
답변1
rm
재귀는 아래쪽으로만 갈 수 있죠?
rm -r x y
x
및 y
그 안의 모든 내용(디렉터리인 경우)은 삭제되지만 부모나 그 밖의 모든 내용은 삭제되지 않습니다.
실행 중:
sudo rm -R *.QTFS
현재 디렉터리와 그 하위 디렉터리에 있는 모든 *.QTFS 파일이 삭제됩니다. 그렇죠?
습관. 이름이 지정된 모든 파일 *.QTFS
과 그 안에 있는 모든 파일을 재귀적으로 삭제합니다.목차라고 불리며 *.QTFS
디렉토리 자체도 마찬가지입니다. 추가 삭제 동작을 원하면 다음을 사용하십시오.find -delete
.
표시된 현재 디렉토리에는 더 나은 단어가 없기 때문에 및 링크
ls -lha
도 포함되어 있는데 왜 재귀가 디렉토리 트리에서 이러한 위쪽을 따르지 않습니까? rm 앱에 인위적인 제한이 있나요, 아니면 둘 다 진짜인가요?.
..
.
..
이는 인위적인 제한 사항입니다 rm
.
하지만 실제로 그렇게 인공적인 것은 아닙니다. 이것이 작동하는 유일한 방식입니다. 각 디렉토리의 및 항목을 보면 rm
상위 링크를 따라가면 시스템 의 모든 파일이 삭제 ..
됩니다 .rm -r
..
/
rm
..
.
목록내용을 명시적으로 무시합니다.
실제로 직접 시도해 볼 수 있습니다. Run 을 실행하면 rm -r .
대부분의 rm
구현에서는 실행을 거부하고 오류를 명시적으로 보고합니다.
$ rm -r .
rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘.’
(뉴스GNU에서rm
;기타 유사한). 명시적 매개변수가 아닌 암시적으로 이러한 항목을 발견하면 해당 항목을 무시하고 계속 진행합니다. 이 행동은POSIX 요구 사항. GNU rm
와 많은 BSD에서는 다음이 제공합니다.fts_read
계층 순회 함수 계열.
아니면 실제가
.
아닌 뭔가..
?
.
그리고 ..
는일반적으로 말하면실제 디렉토리 항목이지만 이는 파일 시스템에 따라 다릅니다. 그럼에도 불구하고 거의 항상 모든 사용자 코드에 대한 실제 항목으로 렌더링됩니다. 많은 소프트웨어(뿐만 아니라 rm
)에는 폭주 또는 원치 않는 재귀를 포착하거나 방지하기 위해 동작을 특별하게 처리하는 기능이 있습니다.
답변2
Michael Homer가 작성한 내용 외에도 상위 디렉터리로의 실수 재귀를 어렵게 만드는 또 다른 요소가 있습니다.
홈 디렉토리로 이동하여 다음을 입력하십시오.
echo *s*
문자 "s"가 포함된 파일 및 디렉터리 목록이 표시되는 것을 볼 수 있습니다. 단, 점으로 시작하는 파일은 표시되지 않습니다. 이를 표시하려면 다음을 사용할 수 있습니다.
echo .*s*
이는 쉘이 *
선행 점을 포함하도록 확장을 거부하기 때문입니다. 이는 다음을 의미합니다.
rm -fr *
로 재귀되지 않습니다 ..
.