Я хотел создать файл с именем test
. Случайно бегаю mkdir test
вместо touch test
.
Можно ли конвертировать test
каталог в файл с именем test
?
Как насчет преобразования файла с именем test
в каталог с таким же именем?
Я хотел создать файл с именем test
. Случайно бегаю mkdir test
вместо touch test
.
Можно ли конвертировать test
каталог в файл с именем test
?
Как насчет преобразования файла с именем test
в каталог с таким же именем?
Ответы:
Это невозможно для любого Unix или Linux, к которому я когда-либо прикасался.
В некоторых старых версиях Unix каталоги - это файлы, специально помеченные, но все же файлы. cat
Например, раньше вы могли читать каталог с помощью SunOS. Многие современные файловые системы могут иметь каталоги в виде деревьев B + или какую-либо другую структуру данных на диске. Таким образом, превращение файла в каталог или наоборот всегда требует удаления и повторного создания с тем же именем.
Нет, такой команды нет, потому что в этом нет абсолютно никакого смысла. Ваш вопрос похож на просьбу о способе преобразования коробки в плоский прямоугольник. Что бы вы сделали с вещами в коробке (каталог)? Как прямоугольник будет соответствовать коробке, из которой он пришел?
Файлы и каталоги выполняют совершенно разные функции. Хотя каталог действительно является файлом в * nix системах, он применяется только к внутренним частям системы, а не к тому, что вы, пользователь, видите. Таким образом, преобразование файла в каталог или наоборот всегда будет включать удаление файла и создание каталога. Лучшее, на что вы могли бы надеяться, это использовать тот же самый инод, но опять же, в этом нет особого смысла.
Создайте функцию, чтобы делать то, что вы хотите. ( bash
или предположить другую оболочку типа 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
$
Я намеренно использую, rmdir
что не удастся, если adir
не является каталогом или не пустой (нет, -f
чтобы заставить). touch
будет работать только в случае rmdir
успеха.
Вы можете поместить определение функции в свой файл настройки оболочки ( .bashrc
для bash
).
--
?
--
знаменует конец флагов так rmdir
и touch
ничего знать прошлое , это имя файла, даже если он начинается с -
.
Для тех, кто интересуется, почему вы хотите сделать это, следуйте этой теме:
Очевидно ошибка в прошивке перевернула бит в записи каталога для файла, заставляя ОС думать, что это папка, а не файл.
Хотя у меня нет роутера Linksys, что-то изменило все мои файлы .jpg в пустые папки. Если есть какой-то способ перевернуть бит (или что-то еще), который говорит, что запись каталога NTFS - это папка против файла, я бы хотел узнать об этом.
Одно из решений в этом двухлетнем потоке говорило, что если жесткий диск, содержащий папки, которые используются для файлов, подключен к Mac с OS / X, Mac снова увидит их как файлы, и они можно скопировать в папку на Mac. У меня нет Mac, чтобы попробовать это, так что если кто-нибудь знает способ перевернуть бит ...
Сначала получите доступ к терминалу и выполните ls -al file
с файлом, который является файлом, который вы хотите преобразовать обратно в ФАКТИЧЕСКУЮ папку. Если в списке есть файлы и подкаталоги, это означает, что ваш «файл» ранее был папкой с реальным содержимым, и вы можете продолжить:
Выполнение:
sudo chmod 700 /
ИЛИ
sudo chmod 700 file
Перезагрузите систему, восстановите доступ к терминалу и выполните:
sudo chmod 744 /
ИЛИ
sudo chmod 744 file
ПОМНИТЕ: «файл» должен быть заменен файлом, который вы хотите преобразовать обратно в ФАКТИЧЕСКУЮ папку.
Это просто произвольный способ решения этой проблемы, но он создает аномалии разрешений, которые вы можете использовать fsck -f
для исправления (пока, конечно, не смонтированного) или вручную при необходимости установить новые разрешения.
СНОВА, это просто проверенный способ избежать удаления файла, который ранее был непустой папкой.
rm -f test && touch test
кроме этого, я действительно не знаю