Przekształć katalog w plik lub plik w katalog

15

Chciałem utworzyć plik o nazwie test. Przypadkowo biegnę mkdir testzamiast touch test.

Czy można przekonwertować testkatalog w pliku o nazwie test?

Co powiesz na konwersję pliku o nazwie testdo katalogu o tej samej nazwie?

Ionică Bizău
źródło
5
rm -f test && touch testpoza tym, naprawdę nie wiem
Kiwy
@ Kiwi Tak, ale wyobrażam sobie wbudowane polecenie zaprojektowane do wykonania tego zadania.
Ionică Bizău

Odpowiedzi:

12

Nie jest to możliwe w przypadku systemów Unix i Linux, których kiedykolwiek dotknąłem.

W niektórych starszych Uniksach katalogi to pliki, specjalnie oznaczone, ale nadal pliki. Na przykład potrafiłeś czytać katalog w catsystemie SunOS. Wiele współczesnych systemów plików może mieć katalogi jako drzewa B + lub inną strukturę danych na dysku. Tak więc przekształcenie pliku w katalog lub odwrotnie zawsze wymagałoby usunięcia i odtworzenia o tej samej nazwie.

Bruce Ediger
źródło
1
Ciekawy. Jeśli nikt nie przyjdzie z rozwiązaniem, zaznaczę tę odpowiedź. :-)
Ionică Bizău
5

Nie, nie ma takiego polecenia, ponieważ absolutnie nie miałoby sensu. Twoje pytanie jest jak zapytanie o sposób przekształcenia pudełka w płaski prostokąt. Co zrobiłbyś z rzeczami w pudełku (katalogu)? W jaki sposób prostokąt odpowiadałby pudełku, z którego pochodzi?

Pliki i katalogi pełnią zupełnie różne funkcje. Chociaż katalog jest rzeczywiście plikiem w systemach * nix, dotyczy to tylko elementów wewnętrznych systemu, a nie tego, co widzisz użytkownik. Tak więc konwersja pliku do katalogu lub odwrotnie zawsze wiąże się z usunięciem pliku i utworzeniem katalogu. Najlepsze, na co możesz mieć nadzieję, to użyć tego samego i-węzła, ale znowu, nie ma to większego sensu.

terdon
źródło
Mówiąc, że nie ma sensu, to twoja opinia, a nie fakt tekstowy.
Sridhar Sarnobat
@ user7000 co byś zrobił z zawartością katalogu, kiedy „konwertujesz” do pliku?
terdon
System plików przechowuje dane w strukturze drzewa. W informatyce węzły drzew, które są węzłami liści, mogą stać się węzłami wewnętrznymi po dodaniu do nich dzieci. I nie, nie zamierzam używać bazy danych, gdy wystarcza system plików.
Sridhar Sarnobat
2

Utwórz funkcję, aby robić, co chcesz. ( bashlub założono inną powłokę Bourne / POSIX)

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

Celowo używam, rmdirktóry zawiedzie, jeśli adirnie jest katalogiem lub nie jest pusty (nie, -faby wymusić). touchbędzie działać tylko w przypadku rmdirpowodzenia.

Możesz umieścić definicję funkcji w pliku dostosowywania powłoki ( .bashrcdla bash).

X Tian
źródło
@Stephane Chazelas Co robi --?
X Tian
2
to --oznacza koniec tak flagami rmdiri touchnic wiedzieć przeszłość jest to nazwa pliku, nawet jeśli zaczyna się -.
Kevin
2

Jeśli zastanawiasz się, dlaczego chcesz to zrobić, skorzystaj z tego wątku:

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

Najwyraźniej błąd w oprogramowaniu układowym spowodował, że bit we wpisie katalogu dla pliku sprawił, że system operacyjny uznał, że jest to folder zamiast pliku.

Chociaż nie mam odpowiedniego routera Linksys, coś zmieniło wszystkie moje pliki .jpg w puste foldery. Jeśli jest jakiś sposób, aby przerzucić bit (lub cokolwiek), który mówi, że pozycja katalogu NTFS jest folderem kontra plik, chciałbym o tym wiedzieć.

Jedno z rozwiązań w tym 2-letnim wątku mówi, że jeśli dysk twardy zawierający foldery, które kiedyś były plikami, zostanie podłączony do komputera Mac z systemem OS / X, komputer Mac zobaczy je ponownie jako pliki i można skopiować do folderu na komputerze Mac. Nie mam komputera Mac, aby to wypróbować, więc jeśli ktoś wie, jak to odwrócić ...

Peter Dow
źródło
1

Najpierw uzyskaj dostęp do terminala i uruchom ls -al filez plikiem będącym plikiem, który chcesz przekonwertować z powrotem do folderu RZECZYWISTEGO. Jeśli na liście znajdują się pliki i podkatalogi, oznacza to, że „plik” był wcześniej folderem z prawdziwą zawartością i możesz kontynuować:

Wykonać:

sudo chmod 700 /

LUB

sudo chmod 700 file

Uruchom ponownie system, odzyskaj dostęp do terminala i wykonaj:

sudo chmod 744 /

LUB

sudo chmod 744 file

PAMIĘTAJ: „plik” należy zastąpić plikiem, który chcesz przekonwertować z powrotem na folder RZECZYWISTY.

Jest to tylko arbitralny sposób rozwiązania tego problemu, ale tworzy anomalie uprawnień, których można użyć fsck -fdo naprawy (oczywiście bez zamontowania) lub ręcznego ustawiania nowych uprawnień w razie potrzeby.

PONOWNIE, jest to po prostu sprawdzony sposób na uniknięcie konieczności usuwania pliku, który wcześniej był niepustym folderem.

Alex S.
źródło
Ciekawe podejście ...
eyoung100,