ファイルの名前を..(ドットドット)に変更する方法は?


26

どうやらファイルの名前を変更できます...

私が狂っている場合、どのようにファイルの名前を変更します...?そのようなファイル名も許可されていますか?

バックスラッシュはドットの特別な意味を無効にしないようです:

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

11
.そして..すでに存在しています。また、ドットには特別な意味はありません。
ctrl-alt-delor 14

2
名前の付いたファイル.または..Windowsから外部FATまたはNTFSメディアにファイルを作成し、それをUnixベースのシステムにマウントしてみてはどうでしょうか。うーん...
IQAndreas 14

3
@IQAndreasいいえ、Windowsはを使用します。および.. Unix とほぼ同じ方法(superuser.com/a/571364/330318)。(およびその他の特殊名の一体ロット:superuser.com/a/217526/330318
PTwr

2
@PTwr Windowsのストーリーはそれより複雑です。いくつかの特別なことが、ファイルシステムレベル/ NT APIレベル、Win32サブシステムとシェルレベルで発生します。たとえば、2番目のリンクからのGUIDマジックはシェルレベルにあるため、一般的なコマンドラインアプリケーションでは表示されません。NTFSとNT APIに実際に存在するのか...それともWin32 APIによってのみ追加されるのかはわかりません。下位レベルのNT APIとWin32にはいくつかの矛盾があることを知っています。たとえば、Win32はドライブルートからいくつかのファイルを隠します。
CodesInChaos 14

@CodesInChaosは、ドット/ドットドットが仮想インスタンスであり、ファイルシステムドライバーでエミュレートされることを知っている限り、Unixから(問題のある)アイデアを借りた古いFATでも同じでした。1秒ごとのリンクとして、投稿する前に完全に読んでいないことを認めます。このようなものがおそらくより良いでしょう。(しかし、再び、この1つは完全な欠けている./ ..情報)
PTwr

回答:


25

.. 特別なものではなく、すでに存在しているだけです。

Unix、Dos、およびMS-Windowsでは、すべてのディレクトリに、.それ自体..にリンクするディレクトリと、親ディレクトリ(またはルートディレクトリの場合はself)にリンクするディレクトリがあります。

場合...特別なあなたがそれらを削除することはできませんので、それは(実際には、あなたがちょうどそれらを含むディレクトリを削除することができます)のみです。

したがって、(他の)ファイル.または..

あなたがファイルを作成することができますしかし...\.. (ノートでは後にスペースがある..か、他の名前あなたのようなあなたのディレクトリリストに簡単に、しかし、あなたはほとんどここでそれを見ることができない、または)。唯一の予約文字がある/(警告-高度な詳細:ヌル、ヌルは、物事の終わりをマークし、時にはセパレータとしてする以外に何のために使用されていない特殊な文字、です)。.ファイル名、カーネル、またはシェルではなく、エスケープする必要はありません。実際、ファイル名がで始まる場合、.それは特別です。ファイルは通常隠されていますが、エスケープする必要はありません。

さておき

この隠されたファイルの動作は、初期の実装では、約来たls著者が非表示に望んでいた場所...、彼らはで始まるすべてのファイルを非表示にするには、コードを書いたので、.。他のユーザーはこのバグ/機能に気づき.、ファイルを非表示にしたいときからファイルの作成を開始しました。

リンクされた質問の説明

質問者にリンクする質問では、ファイルを親ディレクトリに移動しようとしていますが、..名前が...に変更されていますが、ドットで始まるファイルはデフォルトで非表示になっているため、見つかりません。

フォームでmvを使用する場合 mv a b

  • これに移動する.と、実質的にノーオペレーションになりますがmv、エラーとして扱われます。
  • そこに移動する..と、ファイルは親ディレクトリに移動します。

1
どういう意味If you move to . it is effectively a no operationですか?「no op」ではなく、AとBが同じものであるときにファイルをAからBに移動しようとするとエラーになります。このエラーのより実用的なデモはmv foo ../some_dir/fooまたはmv foo some_subdir/../fooです。
ブランディン14

7
「文字」の一部の定義では、NUL(0x00)もファイル名およびディレクトリ名での使用が制限されています。
user117529 14

1
予約文字(つまり/、NUL)と予約名(つまり...)の区別を明確にすることができます。また.、名前の先頭はアプリケーション層でのみ特別な意味を持ち、カーネルAPIやシステムコールAPIではないことを指摘する価値があります。
カスペルド14

スペースがなくなったと思います。
nyuszika7h

1
..そして、. されている特別:あなたはそれらを移動または削除することはできません。ただし、ファイルそれらに移動する場合は特別ではありません。
reinierpost 14

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 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.