파일 이름을 .. (도트)로 바꾸는 방법은 무엇입니까?


26

분명히 당신은에 파일 이름을 바꿀 수 있습니다... .

내가 미쳤다면 어떻게 파일 이름을 ..또는로 바꾸 .겠습니까? 그러한 파일 이름도 허용됩니까?

백 슬래시는 도트의 특별한 의미를 비활성화하지 않는 것 같습니다.

$ mv test \.
mv: `test' and `./test' are the same file

11
.그리고 ..이미 존재합니다. 그리고 점은 특별한 의미가 없습니다.
ctrl-alt-delor

2
명명 된 파일을 만들 수 있는지 궁금해 .또는 ..외부 상에 윈도우에서 FAT또는 NTFS다음 미디어를 유닉스 기반의 시스템으로 그 마운트하려고합니다. 흠 ...
IQAndreas

3
@IQAndreas 아니요, Windows는을 사용합니다. 그리고 .. Unix 와 같은 방식 ( superuser.com/a/571364/330318 ). (그리고 다른 많은 특별한 이름들 : superuser.com/a/217526/330318 )
PTwr

2
@PTwr Windows 스토리는 그보다 까다 롭습니다. 파일 시스템 레벨 / NT API 레벨, Win32 서브 시스템 및 쉘 레벨에서 특별한 일이 발생합니다. 예를 들어 두 번째 링크의 GUID 매직은 셸 수준이므로 일반적인 명령 줄 응용 프로그램에서는 볼 수 없습니다. 나는 잘 모르겠어요 .그리고 ..실제로 NTFS와 NT API에 존재하거나에만 Win32 API를 추가하는 경우. 하위 NT NT API와 Win32 사이에 몇 가지 불일치가 있음을 알고 있습니다. 예를 들어 Win32는 드라이브 루트에서 여러 파일을 숨 깁니다.
코드 InChaos

@CodesInChaos 내가 아는 한 점 / 점은 가상 인스턴스이며 파일 시스템 드라이버에서 에뮬레이트되며 오래된 FAT 에서는 Unix에서 ( 문제가있는 ) 아이디어 를 빌린 것과 동일했습니다 . 초당 링크에 따라 게시하기 전에 완전히 읽지 않는 것을 인정합니다. 같은 것이 더 좋을 것입니다. (그러나 다시, 이것은 전체 ./ .. 정보가 부족합니다)
PTwr

답변:


25

.. 특별한 것이 아니라 이미 존재한다는 것입니다.

Unix, Dos 및 MS-Windows에서 모든 디렉토리에는 .다시 연결되는 디렉토리와 ..상위 디렉토리 (또는 루트 인 경우 자체)에 링크 되는 디렉토리 가 있습니다.

경우 ...특별한 당신이 그들을 제거 할 수 있기 때문에 (실제로, 당신은 단지 그들을 들어있는 디렉토리를 제거 할 수 있습니다) 전용입니다.

따라서 당신은 어떤 (다른) 파일의 이름을 수 없습니다 ....

당신이 파일을 만들 수 있습니다 그러나 ..., \, , .. (주는 뒤에 공백이있다 ..또는 다른 이름 당신처럼 당신이 디렉토리 목록에 쉽게,하지만 당신은 거의 여기 볼 수 없습니다, 또는); 에만 예약 문자입니다 /(- : 널 (null)는 특수 문자가 아닌 구분 기호로 때로는 사물의 끝을 표시하는 것을 제외하고 아무것도 사용하고, 널 고급 세부 사항 경고). .파일 이름, 커널 또는 셸이 아닌 특별한 의미는 없습니다. 이스케이프 처리가 필요하지 않습니다. 실제로 파일 이름이 a .로 시작 하면 파일이 특별하지만 파일은 일반적으로 숨겨 지지만 여전히 이스케이프 할 필요는 없습니다.

곁에

이 숨겨진 파일 동작의 초기 구현에 대해 온 ls저자가 숨길 싶었던 .하고 ..그들이로 시작하는 모든 파일을 숨길 코드를 작성, 그래서 .. 다른 사용자는이 버그 / 기능을 발견 .하고 파일을 숨기고 싶을 때 부터 파일을 만들기 시작했습니다 .

연계 질문의 설명

질문자에 링크 된 질문에서 파일을 상위 디렉토리로 이동하려고 ..하지만 이름을 바꾸십시오 .... 점으로 시작하는 파일은 기본적으로 숨겨져 있으므로 찾을 수 없습니다.

양식에서 mv를 사용하는 경우 mv a b

  • 이동하면 .실제로는 작동하지 않지만 mv오류로 처리합니다.
  • 당신이 이동하면 ..그 상위 디렉토리에 파일을 이동합니다.

1
무슨 소리 야 If you move to . it is effectively a no operation? A와 B가 같은 경우 파일을 A에서 B로 이동하려고하면 오류가 아닙니다. 이 오류에 대한보다 실용적인 데모는 mv foo ../some_dir/foo또는 mv foo some_subdir/../foo입니다.
Brandin

7
'character'에 대한 일부 정의의 경우 NUL (0x00)도 파일 및 디렉토리 이름에 사용할 수 없습니다.
user117529

1
예약 문자 (예 : /NUL)와 예약 이름 (예 : ...)을 명확하게 구분할 수 있습니다. 또한 .이름이 시작될 때 커널이나 시스템 호출 API가 아닌 응용 프로그램 계층에서만 특별한 의미 가 있음을 지적 할 가치가 있습니다.
kasperd

네 공간이 없어진 것 같아
nyuszika7 시간

1
..하고 . 있는 특별 : 당신이 이동하거나 제거 할 수 없습니다. 그러나 파일 이동할 때 특별하지 않습니다 .
reinierpost

52

파일 이름을 바꾸 .거나 ..모든 디렉토리에 이미이 두 이름에 대한 항목이 포함되어 있기 때문에 이름을 바꿀 수 없습니다 . 이 항목은 디렉토리를 가리키며 파일 이름을 디렉토리로 바꿀 수 없습니다.

mv 대상이 기존 디렉토리 인 경우를 감지하고 현재 이름을 사용하여 파일을 해당 디렉토리로 이동하는 요청으로 해석합니다.

백 슬래시는 .쉘 메타 문자가 아니기 때문에 이와 관련 이 없습니다. \..동일합니다 bash.


9

문제는 파일을 디렉토리로 옮기는 것입니다. 이것은 실패 할 수 있습니다.

한때 어떻게되었는지 알려 드리겠습니다.

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

역사 수업을 +1하고 제대로 다루지 않은 것을 추가합니다.
ctrl-alt-delor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.