Я хотів створити файл з ім’ям test
. Випадково біжу mkdir test
замість touch test
.
Чи можливо перетворити test
каталог у файл з назвою test
?
А як з перетворенням файлу з ім'ям test
у однойменний каталог?
Я хотів створити файл з ім’ям test
. Випадково біжу mkdir test
замість touch test
.
Чи можливо перетворити test
каталог у файл з назвою test
?
А як з перетворенням файлу з ім'ям test
у однойменний каталог?
Відповіді:
Це неможливо для будь-якого Unix або Linux, якого я коли-небудь торкався.
У деяких старих Unixes каталоги - це файли, спеціально позначені, але все-таки файли. cat
Наприклад, раніше ви могли читати каталог із програмою SunOS. Багато сучасних файлових систем можуть мати каталоги як B + дерева або якусь іншу структуру даних на диску. Тому перетворення файлу в каталог або навпаки завжди вимагатиме видалення та повторного створення з тим самим іменем.
Ні, немає такої команди, тому що в ній абсолютно не було б сенсу. Ваше запитання - це як запитати спосіб перетворення коробки в плоский прямокутник. Що б ви зробили з речами, що знаходяться у вікні (каталозі)? Як би прямокутник відповідав коробці, з якої він вийшов?
Файли та каталоги виконують абсолютно різні функції. Хоча каталог справді є файлом у * nix системах, це стосується лише внутрішніх систем, а не того, що бачите ви, користувач. Отже, перетворення файлу в каталог або навпаки завжди буде включати видалення файлу та створення каталогу. Найкраще, на що ви могли б сподіватися, було б використовувати той самий inode, але, знову ж таки, не дуже важливо.
Створіть функцію робити те, що ви хочете. ( 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
окрім цього, я справді не знаю