Dosyayı nasıl yeniden adlandırabilirim .. (dot dot)?


26

Görünüşe göre dosyayı yeniden adlandırabilirsin... .

Eğer delirseydim, dosyayı nasıl yeniden adlandırırdım ..ya da .? Böyle bir dosya adına izin veriliyor mu?

Ters eğik çizgi, noktanın özel anlamını devre dışı bırakmıyor gibi görünüyor:

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

11
.ve ..zaten var. Ve noktanın özel bir anlamı yoktur.
ctrl-alt-delor

2
Acaba Windows’tan .veya ..Windows’tan harici FATveya NTFSortama dosya oluşturabilir misiniz , daha sonra bunu Unix tabanlı bir sisteme yerleştirmeyi deneyebilirsiniz. Hm ...
IQAndreas

3
@IQAndreas hayır, Windows kullanır. ve .. Unix ile aynı şekilde ( superuser.com/a/571364/330318 ). (Ve diğer pek çok özel isimden
çekinmeyin

2
@PTwr Windows hikayesi bundan daha zor. Bazı özel şeyler, dosya sistemi düzeyinde / NT API düzeyinde, bazıları Win32 alt sisteminde ve bazıları ve kabuk düzeyinde gerçekleşir. Örneğin, ikinci bağlantınızdaki GUID sihirbazı kabuk düzeyindedir, bu yüzden onları tipik bir komut satırı uygulamasında göremezsiniz. Ben emin değilim .ve ..aslında NTFS ve NT API yok veya yalnızca Win32 API tarafından eklenen eğer. Alt seviyedeki NT API ve Win32 arasında birkaç tutarsızlık olduğunu biliyorum, örneğin Win32 sürücü kökünden birkaç dosyayı gizliyor.
CodesInChaos

@CodesInChaos, nokta / dotdot'un bildiğim kadarıyla sanal örneklerdir ve dosya sistemi sürücüsünde öykünür ve Unix'ten ödünç alınan ( sorunlu ) bir fikir eski FAT ile aynıydı . İkinci linke gelmeden, göndermeden önce tamamen okumadığını itiraf ediyorum. Böyle bir şey bu one muhtemelen daha iyi olurdu. (ama yine, bu tam yok. / .. info)
PTwr

Yanıtlar:


25

.. özel değil, sadece zaten var.

Unix, Dos ve MS-Windows'ta her dizinin .kendisine geri bağladığı bir dizini ..ve ana dizine bağladığı bir dizini (veya kök dizini varsa kendi kendine) vardır.

Eğer ..ve .özeldir bunları kaldıramazsınız çünkü (aslında, sadece onları içeren dizini kaldırabilirsiniz) sadece.

Bu nedenle, herhangi bir (diğer) dosyayı .veya adını söyleyemezsiniz ...

Eğer dosyaları oluşturabilir Ancak ..., \, , .. (not sonra bir boşluk vardır ..ya da başka isim sizin gibi Dizinde listeleme kolayca ama pek buradan görebilirsiniz veya); Ayrılmış olan tek karakter /(Uyarı - ileri düzey detaylar: ve null, null özel bir karakterdir, nesnelerin sonunu işaretlemek dışında ve bazen bir ayırıcı olarak kullanılmaz). .özel bir anlamı yoktur: isimleri, çekirdeği veya kabuğunu dosyalamak için, kaçmaya gerek yoktur. Aslında, bir dosya adı başlıyorsa, .o zaman özeldir, dosya normalde gizlidir, ancak yine de kaçması gerekmez.

bir kenara

Bu gizli dosya davranışı ls, yazarın gizlemek istediği yerin erken bir uygulamasında ortaya çıktı .ve ..bu nedenle a ile başlayan dosyaları gizlemek için kod yazdılar .. Diğer kullanıcılar bu hatayı / özelliği fark ettiler ve bir .zamandan başlayarak dosyanın gizlenmesini istediklerinde dosya oluşturmaya başladılar .

Bağlantılı soru açıklaması

Sorgulayıcıya bağladığınız soru, dosyayı üst dizine taşımayı deniyor ..ancak yeniden adlandırma biter ..., nokta ile başlayan dosyalar varsayılan olarak gizlidir, bu yüzden bulamıyorlar.

Formda mv kullanırken mv a b

  • Hareket ederseniz .etkili bir işlem olmaz, ancak mvhata olarak kabul edilir.
  • Hareket ederseniz .., dosyayı ana dizine taşır.

1
Ne demek istiyorsun If you move to . it is effectively a no operation? Bir "hayır op" değildir, A ve B aynı şey olduğunda bir dosyayı A'dan B'ye taşımayı denerseniz bu bir hatadır. Bu hatanın daha pratik gösterimi mv foo ../some_dir/fooveya mv foo some_subdir/../foo.
Brandin

7
Bazı 'karakter' tanımları için, NUL (0x00) dosya ve dizin adlarında kullanımı da sınırlandırılmıştır.
user117529,

1
Ayrılmış karakter (yani /ve NUL) ve ayrılmış ad (yani .ve ..) arasındaki ayrım netleştirilebilir. Ayrıca ., adın başında yalnızca uygulama katmanında özel bir anlama sahip olduğunu, çekirdeği veya sistem çağrısı API'sinde olmadığını belirtmeye değer.
kasperd

Bence senin alanın kayboldu.
nyuszika7h

1
..ve . olan özel: taşıyabilir veya bunları kaldıramazsınız. Dosyaları taşırken Ama özel değildir için onlara.
reinierpost

52

Bir dosyayı yeniden adlandıramazsınız .veya ..tüm dizinler zaten bu iki adın girişlerini içerdiğinden. (Bu girişler dizinlere işaret eder ve bir dosyayı bir dizine yeniden adlandıramazsınız.)

mv Hedefin varolan bir dizin olduğu durumu tespit eder ve dosyayı bu dizine taşımak için bir istek olarak yorumlar (mevcut adını kullanarak).

Ters eğik çizgilerin bununla hiçbir ilgisi yoktur, çünkü .bir kabuk metaaktörü değildir. \.ve .aynıdır bash.


9

Sorun, bir dosyayı bir dizine taşımanızdır. Bunun başarısız olmasına izin verilir.

Sana bir zamanlar nasıl olduğunu anlatacağım.

mkdir esasında bunu okurdu (bunu sh ile yazarken, gerçekten C ve setuid-root ile yazılmıştı).

mknod d $1
ln -d $1 $1/.
ln -d `dirname $1` $1/..

Gördüğünüz gibi özel bir şey yok. ve .. mkdir tarafından sizin için yaratılmış olmaları ve zaten var olmaları dışında. Artık bunları kaldıramayacağınızı söyleyen bir kod var, ancak her zaman böyle değildi.

rmdir şöyle görünürdü:

rm -d $1/..
rm -d $1/.
rm -d $1

Tarih dersi için +1 ve uygun şekilde kapsanmayan bir şey eklemek.
ctrl-alt-delor,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.