Ubah direktori menjadi file atau file menjadi direktori

15

Saya ingin membuat file bernama test. Secara tidak sengaja saya mkdir testmalah lari touch test.

Apakah mungkin untuk mengkonversi testdirektori dalam file bernama test?

Bagaimana dengan mengonversi file yang dinamai testmenjadi direktori dengan nama yang sama?

Ionică Bizău
sumber
5
rm -f test && touch testkecuali ini, saya benar-benar tidak tahu
Kiwy
@ Kiriw Ya, tapi saya membayangkan perintah bawaan yang dirancang untuk melakukan tugas ini.
Ionică Bizău

Jawaban:

12

Ini tidak mungkin untuk Unix atau Linux yang pernah saya sentuh.

Di bawah beberapa Unix yang lebih lama, direktori adalah file, yang ditandai secara khusus, tetapi masih berupa file. Anda dulu dapat membaca direktori dengan catSunOS, misalnya. Banyak filesystem modern mungkin memiliki direktori sebagai B + tree, atau beberapa struktur data pada disk. Jadi mengubah file menjadi direktori atau sebaliknya akan selalu membutuhkan penghapusan dan pembuatan ulang dengan nama yang sama.

Bruce Ediger
sumber
1
Menarik. Jika tidak ada yang datang dengan solusi saya akan menandai jawaban ini. :-)
Ionică Bizău
5

Tidak, tidak ada perintah seperti itu karena sama sekali tidak ada gunanya. Pertanyaan Anda seperti meminta cara untuk mengubah sebuah kotak menjadi persegi panjang datar. Apa yang akan Anda lakukan dengan hal-hal di dalam kotak (direktori)? Bagaimana persegi panjang sesuai dengan kotak asalnya?

File dan direktori memiliki fungsi yang sangat berbeda. Sementara direktori memang file dalam sistem * nix, itu hanya berlaku untuk internal sistem dan bukan untuk apa yang Anda, pengguna, lihat. Jadi, mengonversi file ke direktori, atau sebaliknya, akan selalu melibatkan menghapus file dan membuat direktori. Yang terbaik yang bisa Anda harapkan adalah menggunakan inode yang sama tetapi sekali lagi, tidak banyak gunanya.

terdon
sumber
Mengatakan tidak ada gunanya adalah pendapat Anda, bukan fakta teknis.
Sridhar Sarnobat
@ user7000 apa yang akan Anda lakukan dengan isi direktori ketika Anda "mengkonversi" ke file?
terdon
Sistem file menyimpan data dalam struktur pohon. Dalam ilmu komputer, simpul pohon yang merupakan simpul daun dapat menjadi simpul internal saat Anda menambahkan anak ke dalamnya. Dan tidak, saya tidak akan menggunakan database ketika sistem file mencukupi.
Sridhar Sarnobat
2

Buat fungsi untuk melakukan apa yang Anda inginkan. ( bashatau diasumsikan shell Bourne / POSIX lainnya)

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

Saya sengaja menggunakan rmdirmana yang akan gagal jika adirbukan direktori atau tidak kosong (tidak -fmemaksa). touchhanya akan berjalan jika rmdirberhasil.

Anda bisa meletakkan definisi fungsi di file kustomisasi shell Anda ( .bashrcuntuk bash).

X Tian
sumber
@Stephane Chazelas Apa fungsinya --?
X Tian
2
yang --menandai akhir dari bendera jadi rmdirdan touchtahu apa-apa masa lalu itu adalah nama file, bahkan jika itu dimulai dengan -.
Kevin
2

Bagi mereka yang bertanya-tanya mengapa Anda ingin melakukan ini, ikuti utas ini:

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

Rupanya bug di firmware membalik bit dalam entri direktori untuk file tersebut, membuat OS berpikir itu adalah folder, bukan file.

Meskipun saya tidak memiliki perute Linksys yang dipermasalahkan, sesuatu mengubah semua file .jpg saya menjadi folder kosong. Jika ada cara untuk membalik bit (atau apa pun) yang mengatakan entri direktori NTFS adalah folder vs file, saya ingin tahu tentang hal itu.

Salah satu solusi dalam utas selama 2 tahun itu mengatakan jika hard drive yang berisi folder-yang-digunakan-menjadi-file-terhubung ke Mac yang menjalankan OS / X, Mac akan melihatnya sebagai file lagi, dan mereka dapat disalin ke folder di Mac. Saya tidak punya Mac untuk mencobanya, jadi jika ada yang tahu cara untuk membalikkan bit ...

Peter Dow
sumber
1

Pertama, dapatkan akses ke terminal dan jalankan ls -al filedengan file menjadi file yang ingin Anda konversi kembali menjadi folder AKTUAL. Jika ada file dan sub-direktori yang terdaftar itu berarti "file" Anda sebelumnya folder dengan konten nyata dan Anda dapat melanjutkan:

Menjalankan:

sudo chmod 700 /

ATAU

sudo chmod 700 file

Mulai ulang sistem dan dapatkan kembali akses terminal dan jalankan:

sudo chmod 744 /

ATAU

sudo chmod 744 file

INGAT: "file" harus diganti dengan file yang ingin Anda konversi kembali menjadi folder AKTUAL.

Ini hanyalah cara sewenang-wenang untuk menyelesaikan masalah ini tetapi ini menciptakan anomali izin yang dapat Anda gunakan fsck -funtuk memperbaikinya (sementara tidak dipasang tentu saja) atau secara manual mengatur izin baru sesuai kebutuhan.

LAGI, ini hanyalah cara yang sudah terbukti untuk menghindari keharusan menghapus file yang sebelumnya merupakan folder tidak kosong.

Alex S.
sumber
Pendekatan yang menarik ...
eyoung100