파일 위치를 scp 하위 프로세스로 전달하는 python 스크립트를 작성 중입니다. 모두 괜찮습니다. 그러나 파일 이름으로 경로를 연결하는 상황에 처해 있습니다. 경로에 이중 '/
가 있습니다. 파일 분리기가 여러 개인 경우 bash가 신경 쓰지 않는다는 것을 알고 있지만 정확히 어떻게 수정되는지 궁금합니다. 추가 /
또는 정말 중요하지 않습니까?
연결하는 동안 추가 /
를 확인하기 위해 몇 줄의 코드를 저장하기 때문에 묻습니다. 큰 문제는 아니라는 것도 알고 있지만 궁금합니다. cd //usr
대신 cd /usr
줄을 가진 bash 스크립트가 있는데, 경로에서 여러 /
를 사용하는 것이 중요 할 수 있습니다.
여러 개의 슬래시가 허용되며 단일 슬래시와 같습니다. Single Unix 사양 (버전 4) , 기본 정의 §3.271 pathname :“여러 연속 슬래시는 하나의 슬래시와 동일한 것으로 간주됩니다.”
한 가지 예외가 있습니다. 경로명이 두 개의 연속 문자로 시작하는 경우 선행 문자 다음에 오는 첫 번째 구성 요소는 구현 정의 방식으로 해석 될 수 있습니다. (참조 : 기본 정의 §4.13 경로 이름 확인 ). Linux 자체는이를 수행하지 않지만 일부 응용 프로그램과 다른 유닉스 시스템은 가능합니다 (예 : Cygwin).
경로명의 끝에 /
가 있으면 경로명이 디렉토리를 참조하게합니다. ( POSIX 1003.1-2001 (Single Unix v4) 기본 정의 §4.11 경로 이름 확인) 에서 후행 /
는 후행 /.
와 같습니다. POSIX 1003.1-2008 (Single Unix v4) 기본 정의 §4.1 존재하지 않는 디렉토리에 대처하기 위해 /.
와 동등한 조건을 제거합니다 (예 : mkdir foo/
작동하지만 mkdir foo/.
는 그렇지 않습니다 — 변경에 대해서는 rationale 참조).
디렉토리 항목에서 작동하는 프로그램의 경우, foo
가 디렉토리에 대한 기호 링크 인 경우 foo/
를 전달하면 프로그램이 기호 링크 대신 디렉토리에서 작동하게됩니다.
¹ 이는 경로 이름 확인, 즉 파일에 액세스 할 때만 적용됩니다. 파일 이름 조작이 다르게 작동 할 수 있습니다. 예를 들어 basename
및 dirname
슬래시를 무시합니다.
OS는 경로에 //로 열려있는 직접 syscall을 사용하여 C 프로그램을 시도한 것처럼 신경 쓰지 않는 것처럼 보입니다.
python 라이브러리 함수 os.path.normpath를 사용하여 정규화 할 수 있으므로, 문자열을 스캔하여 추가 정보를 찾을 필요가 없습니다. 다른 언어도 비슷한 기능을 가지고 있습니다.
http://docs.python.org/library/os.path.html#os.path.normpath
내가 본 모든 유닉스 시스템에서 단일 /
이지만 nix standard
두 개의 연속 슬래시로 시작하는 경로 이름은 구현 정의 방식으로 해석 될 수 있지만 두 개 이상의 선행 슬래시는 단일 슬래시로 취급됩니다.
시스템에 따라 특별하게 처리 될 수 있습니다. (일부 구형 유닉스 버전은 이중 선행 /
원격 파일 시스템 액세스의 경우 여전히 일부가있을 수 있습니다.)
사용하다 os.path.join
in Python 그리고 여러 개의 슬래시를 얻지 못할 것입니다. 문자열을 연결하여 파일 이름을 직접 만드는 것은 좋지 않은 것으로 간주됩니다 Python 스타일).
다른 점이 없다.
여러 개의 슬래시가 무시됩니다 (효과 없음). 예 :
ls -al //usr///////bin/sed
물론 여러 개의/(슬래시)가있는 경로를 tr -s
NORMALIZED=$(echo "$UNHYGIENIC" | tr -s / /)
... 그리고 $NORMALIZED
그러나 필요합니다. 내가 아는 것처럼 유닉스 커널은 동시 경로 구분자를 무시하거나 개념적으로 ..././
...