디렉토리 이름 사이에 차이가 있습니까?
mydirectory
그리고
mydirectory/
ls
특정 디렉토리에서 실행할 때 이런 일이 발생한다는 것을 알았습니다 . 일부 디렉토리 이름에는 슬래시가 있고 일부는 슬래시가 없습니다. 디렉터리에 포함된 파일에 액세스하려면 끝에 슬래시를 추가해야 할 수 있으므로 문제가 됩니다.
vi $mydirectory"/"$myfile
아니면 그냥 하세요
vi $mydirectory$myfile
답변1
그것이 없는 /
파일일 수도 있습니다 .
어떤 경우에는 치명적일 수 있습니다. 예를 들어 다음을 사용할 때 mv
:
mv file1 mydirectory
mv file2 mydirectory
mv file3 mydirectory
좋아요? 그러나 mydirectory
존재하지 않거나 디렉터리가 아닌 경우 최종 결과는 이고 file1
사라지며 이제 이름은 file2
입니다 .file3
mydirectory
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
.ls
ls
답변3
"멋진 파일 이름"이라는 맥락에서 디렉터리나 폴더를 생각하면 폴더는 여전히 파일이지만 폴더는 파일 캐비닛의 폴더처럼 컨테이너를 가리키는 포인터에 더 가깝습니다. 슬래시 "/" 또는 슬래시 점 "/"을 사용하세요. 스크립트의 경우 폴더가 아닌 파일을 참조하고 있지 않은지 알고 확인하는 것이 도움이 됩니다.
이것이 의미가 있기를 바랍니다.