ساخت فایل فشرده شده با فرمت tar و cpio در الکسیر یا ارلنگ

درود خدمت دوستان . نمی دونم چرا انقدر در مورد فشرده سازی فایل در الکسیر مطلب کم هست ؟

الان من می خوام یک فولدر در یک مسیر مشخص در سیستمم را تبدیل به فرمت .tar کنم و در مسیری مشخص قرار بدهم .
نمی تونم این کارو بکنم ؟

یا اینجا الکسیر و ارلنگ مشکل دارند و باید از بش استفاده بشه ؟ یا وجود داره من ندیدم ؟

به روز رسانی

من چندتا کار کردم گفتم قرار بدم . من اومدم برای گرفتن لیست فایل ها به این صورت عمل کردم که یک مشکل اساسی داره اگر فولدری داخل فولدر باشه و داخلش چندتا فایل باشه متاسفانه تمام فایل هارو نمایش نمی ده

به هر صورت

{:ok , filename } = File.ls("/Users/shahryar/Desktop/test")

بعد این کدو زدم

:erl_tar.create("test.tar", filename) 

بعد بهم این ارور نشون داد

به روز رسانی

اومدم به این صورت هم انجام دادم باز هم نشد

File.cd "/Users/shahryar/Desktop/test"

بعد اومدم به این صورت و مورد بعدیش تست کردم بازم نشد

:os.cmd("tar -zcvf hi.tar.gz")

و همینطور

"tar -zcvf hi.tar.gz" |> String.to_charlist |> :os.cmd

خواستم مشکلمو با کامند های یونیکس حل کنم که جواب گو نبود

1 پسندیده

اوکیه ولی شما اینو استفاده کردید https://github.com/glejeune/elixir-tar

1 پسندیده

درود مهندس جان . تشکر . تو اون پست هم پاسخ بنده دادید خیلی ممنونم . من خیلی جستجو کردم ولی هرچی می خواستم یک کتابخونه پیدا کنم نشد به هر صورت سعی می کنم از این استفاده کنم که با الکسیر هست .

این کتابخونه

tar = Tar.Archive[ file: "/path/to/archive.tar" ]
tar = tar 
      |> Tar.add("path/to/file.1", "path/to")
      |> Tar.add("root/to/file.2", "root")
      |> Tar.create()

اینجا باید تک به تک بهش فایل معرفی کنیم . نمی شه ک فولدر رو یک دفعه .tar کنه ؟

فکر نکم با کل پوشه کار کنه

1 پسندیده

درود خدمت شما . من یک سوال در مورد کد زیپ کردن به فرمت .tar در استک پرسیدم که جواب به این صورت اومد :

به گفته اون فرد باید به این صورت بزنم

{:ok , filenames} = File.ls("/Users/shahryar/Desktop/test")
:ok = :erl_tar.create("test.tar", Enum.map(filenames, &to_charlist/1))

جالبه اولین بار زدم به خوبی اومد و .tar درست کرد ولی دومین بار زدم خیلی طول داشت می کشید و اندازه فایل حتی شده بود ۱.۵ گیگ که کنترل c زدم ولی اومدم و iex رو بستم دوباره باز کردم کدمو تکرار کردم به این صورت بالا بهم ارور می ده به شرح زیر

** (MatchError) no match of right hand side value: {:error, {'one', :enoent}}

به نظر شما مشکل کجاست ؟ کدش به نظر سالم می اومد و کار می کرد

راستی یک فایل با اسمی که معرفی می کنیم در مسیر روت پروژه می سازه که 0بایت یا ۸ بایت هست و اکسترکت هم نمی شه مشکل داره . و مسیری که انتخاب شده هم وجود دارد .

درود یک اشتباه بسیار خنده داری انجام دادم که باعث این مشکل می شد . من باید اول با File.cd وارد پوشه می شدم و بعد دستور بالا رو می زدم تا مشکلم حل می شد

دوستان مشکل الان حل شد به خوبی و راهنمایی دوست محترم @samdvr

یک سوال پیش می یاد الان خوب حجم پایین هست ولی روی سرور بکاپ یک فایل می شه حدود ۱۰ گیگ یا حتی ۱ گیگ باید برای این کار چطور روشی انجام داد که تمام منابع سرور رو به خودش تخصیص نده ؟