미친 경우 파일 이름을 ..
또는 로 어떻게 바꿀 수 있습니까 .
? 그러한 파일 이름이 허용됩니까?
백슬래시는 점의 특별한 의미를 비활성화하지 않는 것 같습니다.
$ mv test \.
mv: `test' and `./test' are the same file
답변1
모든 디렉터리에 이미 두 이름에 대한 항목이 포함되어 있으므로 파일 이름을 .
or 로 바꿀 수 없습니다. ..
(이 항목은 디렉터리를 가리키며 파일 이름을 디렉터리로 바꿀 수 없습니다.)
mv
대상이 기존 디렉터리인 경우를 감지하고 이를 해당 디렉터리(현재 이름을 사용하여)로 파일을 이동하라는 요청으로 해석합니다.
.
백슬래시는 쉘 메타 문자가 아니기 때문에 관련이 없습니다 . \.
와 .
동일합니다 bash
.
답변2
..
특별한 것이 아니라 이미 존재한다는 것뿐입니다.
Unix, Dos 및 MS-Windows에서 각 디렉토리에는 .
자신에게 다시 연결된 디렉토리와 ..
상위 디렉토리(루트 디렉토리인 경우 self)에 다시 연결된 디렉토리가 있습니다.
..
and가 특별 하다면 .
삭제하거나 이름을 바꿀 수 없기 때문입니다(실제로는 삭제할 수 있습니다. 해당 항목이 포함된 디렉터리만 삭제하면 됩니다).
따라서 (다른) 파일 .
이나 ..
.
...
그러나 , \
, , …
, ..
(그 뒤에 공백이 있지만 ..
여기서는 거의 볼 수 없거나 디렉토리 목록에서 쉽게 볼 수 있음) 또는 원하는 다른 이름을 만들 수 있습니다 .오직예약된 문자는 /
(경고 - 고급 세부 정보: 및 null, null은 무언가의 끝을 표시하는 것 이외의 목적으로 사용되지 않는 특수 문자이며 때로는 구분 기호로 사용됩니다)입니다. .
특별한 의미는 없습니다. 파일 이름, 커널 또는 셸이 아니며 이스케이프가 필요하지 않습니다. 실제로 파일 이름이 a로 시작하면 .
특수한 파일이며 일반적으로 파일은 디렉터리 목록 도구(예:)에 의해 숨겨지지만 ls
여전히 이스케이프할 필요는 없습니다.
옆에
이 숨겨진 파일 동작은 ls
작성자가 숨기려는 초기 구현 에서 나타났으 .
므로 ..
숨기려는 코드를 작성했습니다 .
. 다른 사용자는 이 버그/기능을 발견하고 .
숨기려는 파일에서 시작하여 파일을 만들기 시작했습니다.
링크 문제에 대한 설명
질문자에게 링크한 질문에서 파일을 상위 디렉토리로 이동하려고 했지만 ..
이름이 바뀌었습니다. ...
점으로 시작하는 파일은 기본적으로 숨겨져 있으므로 찾을 수 없습니다.
mv를 폼에 사용하는 경우mv a b
- 해당 위치 로 이동하면
.
실제로는 no 동작이지만mv
오류로 처리됩니다. - 이동하면
..
파일이 상위 디렉터리로 이동됩니다.
답변3
문제는 파일을 디렉터리로 이동한다는 것입니다. 이는 실패할 수 있습니다.
예전에는 어땠는지 말씀드리겠습니다.
mkdir은 기본적으로 이것을 읽었습니다. (내가 이것을 sh로 썼을 때 실제로는 C와 setuid-root로 작성되었습니다.)
mknod d $1
ln -d $1 $1/.
ln -d `dirname $1` $1/..
보시다시피 특별한 것은 없습니다. 그리고..mkdir이 당신을 위해 만들어졌고 이미 존재한다는 사실을 제외하면. 이제 삭제할 수 없다는 코드가 있지만 항상 그런 것은 아닙니다.
rmdir은 다음과 같았습니다:
rm -d $1/..
rm -d $1/.
rm -d $1