Перетворіть каталог у файл або файл у каталог


15

Я хотів створити файл з ім’ям test. Випадково біжу mkdir testзамість touch test.

Чи можливо перетворити testкаталог у файл з назвою test?

А як з перетворенням файлу з ім'ям testу однойменний каталог?


5
rm -f test && touch testокрім цього, я справді не знаю
Ківі

@Kiwy Так, але я уявляю вбудовану команду, яка призначена для виконання цього завдання.
Ionică Bizău

Відповіді:


12

Це неможливо для будь-якого Unix або Linux, якого я коли-небудь торкався.

У деяких старих Unixes каталоги - це файли, спеціально позначені, але все-таки файли. catНаприклад, раніше ви могли читати каталог із програмою SunOS. Багато сучасних файлових систем можуть мати каталоги як B + дерева або якусь іншу структуру даних на диску. Тому перетворення файлу в каталог або навпаки завжди вимагатиме видалення та повторного створення з тим самим іменем.


1
Цікаво. Якщо ніхто не прийме рішення, я позначу цю відповідь. :-)
Ionică Bizău

5

Ні, немає такої команди, тому що в ній абсолютно не було б сенсу. Ваше запитання - це як запитати спосіб перетворення коробки в плоский прямокутник. Що б ви зробили з речами, що знаходяться у вікні (каталозі)? Як би прямокутник відповідав коробці, з якої він вийшов?

Файли та каталоги виконують абсолютно різні функції. Хоча каталог справді є файлом у * nix системах, це стосується лише внутрішніх систем, а не того, що бачите ви, користувач. Отже, перетворення файлу в каталог або навпаки завжди буде включати видалення файлу та створення каталогу. Найкраще, на що ви могли б сподіватися, було б використовувати той самий inode, але, знову ж таки, не дуже важливо.


Сказати, що це не має сенсу, це ваша думка, а не текстильний факт.
Шрідхар Сарнобат

@ user7000, що б ви зробили зі вмістом каталогу, коли ви "конвертували" у файл?
terdon

Файлова система зберігає дані в структурі дерева. В інформатиці вузли дерев, які є листяними вузлами, можуть стати внутрішніми вузлами, коли ви додаєте до них дітей. І ні, я не збираюся використовувати базу даних, коли файлової системи достатньо.
Шрідхар Сарнобат

2

Створіть функцію робити те, що ви хочете. ( 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).


@Stephane Chazelas Що робить --?
X Tian

2
що --знаменує кінець прапорів так rmdirі touchнічого знати минуле , це ім'я файлу, навіть якщо він починається з -.
Кевін

2

Для тих, хто цікавиться, чому ви хочете це зробити, дотримуйтесь цієї теми:

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

Мабуть, помилка в прошивці перевернула біт у записі каталогу для файлу, змусивши ОС подумати, що це папка замість файлу.

Поки у мене немає маршрутизатора Linksys, щось змінило всі мої файли .jpg у порожні папки. Якщо є можливість перевернути біт (або що завгодно), який говорить, що запис каталогу NTFS - це папка проти файлу, я хотів би знати про це.

Одне з рішень у цій дворічній нитці говорить про те, що якщо жорсткий диск, який містить папки, які використовуються для файлів, підключений до Mac з ОС OS / X, Mac знову побачить їх як файли, і вони можна скопіювати в папку на Mac. У мене немає Mac, щоб спробувати це, тому якщо хтось знає спосіб перевернути шматочок ...


1

По-перше, отримати доступ до терміналу та виконати ls -al file з файлом, який є файлом, який ви хочете перетворити назад у папку АКТУАЛЬНІ. Якщо в списку є файли та підкаталоги, це означає, що ваш "файл" раніше був папкою з реальним вмістом, і ви можете продовжувати:

Виконати:

sudo chmod 700 /

АБО

sudo chmod 700 file

Перезавантажте систему та відновіть доступ до терміналу та виконайте:

sudo chmod 744 /

АБО

sudo chmod 744 file

ПАМ’ЯТАЙТЕ: "файл" слід замінити файлом, який ви хочете перетворити назад у текучу папку.

Це лише довільний спосіб вирішити цю проблему, але це створює аномалії дозволу, які ви можете використовувати fsck -fдля виправлення (якщо не встановлено, звичайно) або вручну встановлювати нові дозволи, якщо це потрібно.

ПРОТИ, це лише перевірений спосіб уникнути необхідності видаляти файл, який раніше був не порожньою папкою.


Цікавий підхід ...
eyoung100
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.