내 코드에서는 기본적으로 모든 파일을 재귀적으로 반복하고 stat -c%s $i
.
stat: cannot stat '/media/root/persistence/.Trash-0/info/subory': No such file or directory
/media/root/persistence/
디렉토리 로 이동하여 를 입력하면 ls
폴더 ./Trash-0
가 표시되지 않으므로 폴더 자체와 해당 내용이 숨겨져 있다고 가정합니다. 이러한 오류 메시지를 제거하고 그 안에 있는 파일의 크기를 어떻게 알 수 있습니까?
답변1
이것을 시도해 보세요. 모든 파일을 표시 ".*"
하여 숨겨진 파일을 표시하고 "*"
숨기지 않은 파일을 표시합니다.
stat -c%s .* *
답변2
stat
숨김 파일 동작에는 문제가 없습니다. 기본적으로 Unix 계열 시스템의 프로그램은 일반적으로 로 시작하는 파일과 디렉터리를 무시 .
하지만 이러한 파일을 명시적으로 지정한다고 해서 해당 프로그램이 해당 파일을 보거나 조작하는 것을 방지할 수는 없습니다.
stat
이 오류는 존재하지 않는 파일이나 디렉터리에서 작업이 시도되었다는 의미입니다 . 이는 코드가 먼저 파일 목록을 생성한 다음 해당 목록을 반복할 때 코드 .../info/subory
가 파일 목록에 도달하기 전에 삭제되거나 이름이 바뀌거나 이동되기 때문일 가능성이 높습니다.
상위 디렉터리의 이름을 고려하면 이는 코드가 실행되는 동안 수동으로 또는 일부 자동화된 프로세스를 통해 데스크톱의 정크 파일을 비우는 것만큼 간단할 수 있습니다.
이와 같은 일시적인 문제의 경우 가장 간단한 해결책은 오류를 무시하고 다음 루프 반복으로 건너뛰는 것입니다.
stat -c%s $i 2>/dev/null || continue
또는 기본값을 할당합니다( 유효한 크기 -1
이므로 문제를 나타내는 데 사용됨).0
size=$(stat -c%s $i || echo -1)
다음을 실행하기 전에 파일이나 디렉터리가 존재하는지 확인할 수도 있습니다 stat
.
test -e $i && stat -c%s $i
또는 이러한 기술을 조합하여 사용하십시오.