슬래시로 끝나는 디렉토리 이름과 슬래시로 끝나지 않는 디렉토리 이름의 차이점은 무엇입니까? [복사]

슬래시로 끝나는 디렉토리 이름과 슬래시로 끝나지 않는 디렉토리 이름의 차이점은 무엇입니까? [복사]

디렉토리 이름 사이에 차이가 있습니까?

mydirectory

그리고

mydirectory/

ls특정 디렉토리에서 실행할 때 이런 일이 발생한다는 것을 알았습니다 . 일부 디렉토리 이름에는 슬래시가 있고 일부는 슬래시가 없습니다. 디렉터리에 포함된 파일에 액세스하려면 끝에 슬래시를 추가해야 할 수 있으므로 문제가 됩니다.

vi $mydirectory"/"$myfile

아니면 그냥 하세요

vi $mydirectory$myfile

답변1

그것이 없는 /파일일 수도 있습니다 .

어떤 경우에는 치명적일 수 있습니다. 예를 들어 다음을 사용할 때 mv:

mv file1 mydirectory
mv file2 mydirectory
mv file3 mydirectory

좋아요? 그러나 mydirectory존재하지 않거나 디렉터리가 아닌 경우 최종 결과는 이고 file1사라지며 이제 이름은 file2입니다 .file3mydirectory

mv file1 mydirectory/
mv file2 mydirectory/
mv file3 mydirectory/

존재하지 않으면 mydirectory세 개의 오류 메시지만 표시되고 file1여전히 남아 있습니다 file2.file3

이는 /일부 모호성을 제거합니다.

그 외에는 딱히 규칙이 없습니다. 일부 프로그램은 /마지막에 제공 여부에 따라 다르게 동작할 수 있습니다 . 무엇을 해야 할지는 그들에게 달려 있습니다.

어떤 경우에는 너무 많이 사용하면 문제가 발생할 수도 있습니다 /. 예를 들어, 출력에 find나머지 부분을 유지하므로 /, 이와 같은 비교 대신 간단한 문자열 비교를 사용하여 파일/경로 이름을 찾으려고 하면 잘못될 수 있습니다 realpath.

답변2

이는 "표시" 일 수 있습니다 ls. 즉, 이 작업을 수행하거나 ls -p디렉터리 ls -F뒤에 슬래시를 일관되게 추가해야 합니다. 본질적으로 파일이 무엇이라고 생각하는지에 대한 시각적 단서를 추가합니다. ( 심볼릭 링크, 실행 권한이 있는 파일, 명명된 파이프, 소켓 등에 -F연결된다는 점에 유의하세요.) vs를 사용하여 재현 할 수도 있습니다 .@*|=ls -d directory/ls -d directory

/나는 \0이것이 유효하지 않은 파일/디렉토리 이름의 유일한 두 문자라고 생각합니다.

항상 슬래시를 추가하는 것이 안전해야 하며 mydirectory와 myfile을 올바르게 할당하면 vim "$mydirectory/$myfile"예상대로 작동해야 합니다. (경고 $mydirectory$myfile올바르게 할당됨) foo/bar그리고 foo//bar동일해야 합니다.

일반적으로 나는 ls의 출력을 변수에 할당하고 처리하는 것을 좋아하지 않습니다. 주로 이전에 파일 이름의 문자와 누락된 따옴표로 인해 궁극적으로 파괴적인 결과가 발생했기 때문입니다. (즉, prefix=/home user=" oops" rm -rf $prefix$user결국 재귀적으로 삭제 /home한 다음 재귀적으로 삭제를 시도하게 됩니다 ./oops.)

나는 ls 를 사용하지 않지만 bash나 find -print0 | xargs -0.lsls

답변3

"멋진 파일 이름"이라는 맥락에서 디렉터리나 폴더를 생각하면 폴더는 여전히 파일이지만 폴더는 파일 캐비닛의 폴더처럼 컨테이너를 가리키는 포인터에 더 가깝습니다. 슬래시 "/" 또는 슬래시 점 "/"을 사용하세요. 스크립트의 경우 폴더가 아닌 파일을 참조하고 있지 않은지 알고 확인하는 것이 도움이 됩니다.

이것이 의미가 있기를 바랍니다.

관련 정보