Adlı bir dosya oluşturmak istedim test
. Yanlışlıkla koşuyorum mkdir test
yerine touch test
.
test
Adlı bir dosyadaki dizini dönüştürmek mümkün mü test
?
test
Aynı ada sahip bir dizine dosya dönüştürmeye ne dersiniz ?
Adlı bir dosya oluşturmak istedim test
. Yanlışlıkla koşuyorum mkdir test
yerine touch test
.
test
Adlı bir dosyadaki dizini dönüştürmek mümkün mü test
?
test
Aynı ada sahip bir dizine dosya dönüştürmeye ne dersiniz ?
Yanıtlar:
Bu, dokunduğum hiçbir Unix veya Linux için mümkün değil.
Bazı eski Unix'lerin altında, dizinler özel olarak işaretlenmiş ancak sabit dosyalardır. cat
Örneğin SunOS altında bir dizini okuyabiliyordunuz . Birçok modern dosya sistemi, B + ağaçları veya başka bir diskteki veri yapısı olarak dizinlere sahip olabilir. Bu nedenle bir dosyayı bir dizine veya tam tersine dönüştürmek her zaman bir silme ve aynı ada sahip bir yeniden oluşturma gerektirir.
Hayır, böyle bir emir yoktur, çünkü kesinlikle hiçbir anlamı yoktur. Sorunuz, bir kutuyu düz bir dikdörtgene dönüştürmenin bir yolunu istemek gibidir. Kutudaki (dizin) şeylerle ne yapardınız? Dikdörtgen, gelen kutuya nasıl karşılık gelir?
Dosyalar ve dizinler tamamen farklı işlevlere sahiptir. Bir dizin gerçekten de * nix sistemlerinde bir dosya olsa da , bu sadece sizin için değil, kullanıcının için de geçerlidir. Bu nedenle, bir dosyayı bir dizine dönüştürmek veya tersini yapmak her zaman dosyayı silmeyi ve dizini oluşturmayı içerir. Umabileceğiniz en iyi şey, aynı inode kullanmaktır, ancak yine de, bunun içinde çok fazla nokta yoktur.
İstediğinizi yapmak için bir işlev oluşturun. ( bash
veya diğer Bourne / POSIX benzeri kabuk varsayılır)
$ dir2file() { rmdir -- "$1" && touch -- "$1";}
$ mkdir adir
$ dir2file adir
$ ls -l adir
-rw-r--r-- 1 xtian xtian 0 2014-03-04 14:59 adir
$
Bir dizin veya boş değilse ( zorlamak için hayır ) rmdir
başarısız olacak kasıtlı olarak kullanın . yalnızca başarılı olursa çalışır .adir
-f
touch
rmdir
İşlev tanımını kabuk özelleştirme dosyanıza ( .bashrc
için bash
) koyabilirsiniz .
--
?
--
işaretleri böylece bayrakların uç rmdir
ve touch
bir dosya adı geçmiş onunla başlasa bile, hiçbir şey bilmiyor -
.
Bunu neden yapmak istediğini merak edenler için şu konuyu takip et:
Görünüşe göre, bellenimdeki bir hata, dosyanın dizin girişindeki biti çevirerek işletim sisteminin bir dosya yerine bir klasör olduğunu düşünmesini sağladı.
Söz konusu Linksys yönlendiricim olmasa da, bir şey tüm .jpg dosyalarımı boş klasörlere değiştirdi. Bir NTFS dizin girdisinin bir dosyaya karşı bir klasör olduğunu söyleyen biti (veya herhangi bir şeyi) çevirmek için bir yol varsa, bunu bilmek istiyorum.
Bu 2 yıl süren iş parçacığındaki çözümlerden biri, dosyaları kullanmak için kullanılan klasörleri içeren sabit sürücünün OS / X çalıştıran bir Mac'e bağlı olup olmadığını, Mac'in bunları tekrar dosya olarak göreceğini söyledi. Mac'teki bir klasöre kopyalanabilir. Bunu denemek için bir Macim yok, bu yüzden kimse biraz çevirmenin bir yolunu biliyorsa ...
İlk olarak, kazanç terminali erişim ve yürütme ls -al file
ile dosya bir GERÇEK klasörüne geri dönüştürmek istediğiniz dosya olmak. Listelenen dosyalar ve alt dizinler varsa, "dosyanızın" daha önce gerçek içerikli bir klasör olduğu anlamına gelir ve devam edebilirsiniz:
Yürütme:
sudo chmod 700 /
VEYA
sudo chmod 700 file
Sistemi yeniden başlatın ve terminal erişimini yeniden kazanın ve çalıştırın:
sudo chmod 744 /
VEYA
sudo chmod 744 file
UNUTMAYIN: "dosya", GERÇEK bir klasöre geri dönüştürmek istediğiniz dosyayla değiştirilmelidir.
Bu, bu sorunu çözmenin rastgele bir yoludur, ancak fsck -f
düzeltmek için (elbette takılı değilken) kullanabileceğiniz veya gerektiğinde yeni izinleri manuel olarak ayarlayabileceğiniz izin anormallikleri oluşturur .
TEKRAR, bu daha önce boş olmayan bir klasör olan dosyayı silmekten kaçınmanın kanıtlanmış bir yoludur.
rm -f test && touch test
bunun dışında gerçekten bilmiyorum