Chciałem utworzyć plik o nazwie test
. Przypadkowo biegnę mkdir test
zamiast touch test
.
Czy można przekonwertować test
katalog w pliku o nazwie test
?
Co powiesz na konwersję pliku o nazwie test
do katalogu o tej samej nazwie?
Chciałem utworzyć plik o nazwie test
. Przypadkowo biegnę mkdir test
zamiast touch test
.
Czy można przekonwertować test
katalog w pliku o nazwie test
?
Co powiesz na konwersję pliku o nazwie test
do katalogu o tej samej nazwie?
Odpowiedzi:
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 cat
systemie 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.
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.
Utwórz funkcję, aby robić, co chcesz. ( bash
lub 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, rmdir
który zawiedzie, jeśli adir
nie jest katalogiem lub nie jest pusty (nie, -f
aby wymusić). touch
będzie działać tylko w przypadku rmdir
powodzenia.
Możesz umieścić definicję funkcji w pliku dostosowywania powłoki ( .bashrc
dla bash
).
--
?
--
oznacza koniec tak flagami rmdir
i touch
nic wiedzieć przeszłość jest to nazwa pliku, nawet jeśli zaczyna się -
.
Jeśli zastanawiasz się, dlaczego chcesz to zrobić, skorzystaj z tego wątku:
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ć ...
Najpierw uzyskaj dostęp do terminala i uruchom ls -al file
z 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 -f
do 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.
rm -f test && touch test
poza tym, naprawdę nie wiem