Bir dizini dosyaya veya dosyayı dizine dönüştürme


15

Adlı bir dosya oluşturmak istedim test. Yanlışlıkla koşuyorum mkdir testyerine touch test.

testAdlı bir dosyadaki dizini dönüştürmek mümkün mü test?

testAynı ada sahip bir dizine dosya dönüştürmeye ne dersiniz ?


5
rm -f test && touch testbunun dışında gerçekten bilmiyorum
Kiwy

@Kiwy Evet, ama bu görevi yerine getirmek için tasarlanmış yerleşik bir komut hayal ediyorum.
Ionică Bizău

Yanıtlar:


12

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.


1
İlginç. Kimse bir çözümle gelmezse bu cevabı işaretleyeceğim. :-)
Ionică Bizău

5

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.


Bunun bir anlamı olmadığını söylemek, sizin fikrinizdir, tekdüze bir gerçek değildir.
Sridhar Sarnobat

@ user7000 Bir dosyaya "dönüştürdüğünüzde" bir dizinin içeriğiyle ne yapardınız?
terdon

Bir dosya sistemi verileri bir ağaç yapısında saklar. Bilgisayar biliminde, yaprak düğümleri olan ağaç düğümleri, çocuklara eklediğinizde iç düğümler haline gelebilir. Ve hayır, bir dosya sistemi yeterli olduğunda bir veritabanı kullanmayacağım.
Sridhar Sarnobat

2

İstediğinizi yapmak için bir işlev oluşturun. ( bashveya 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 ) rmdirbaşarısız olacak kasıtlı olarak kullanın . yalnızca başarılı olursa çalışır .adir-ftouchrmdir

İşlev tanımını kabuk özelleştirme dosyanıza ( .bashrciçin bash) koyabilirsiniz .


@Stephane Chazelas Ne yapar --?
X Tian

2
--işaretleri böylece bayrakların uç rmdirve touchbir dosya adı geçmiş onunla başlasa bile, hiçbir şey bilmiyor -.
Kevin

2

Bunu neden yapmak istediğini merak edenler için şu konuyu takip et:

https://community.linksys.com/t5/Wireless-Routers/Media-files-changing-to-folder-types/td-p/504192/highlight/true

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 ...


1

İlk olarak, kazanç terminali erişim ve yürütme ls -al fileile 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 -fdü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.


İlginç bir yaklaşım ...
eyoung100
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.