سؤال كيفية استخراج الملفات إلى دليل آخر باستخدام أمر "القطران"؟


اعتقدت tar archive.tar /users/mylocation ستعمل ، لكنها لا تفعل ذلك. كيف أقوم بذلك؟


582
2018-05-26 16:01


الأصل


أيضا، -C, --directory DIR\n change to directory DIR ينبغي بدلا وصفها بأنها change output directory to DIR (will fail if DIR doesn't exist). شكرا @ ميش. راجع أيضًا الإجابة عن @ Bryan_Larsen. - valid
@ Ujjwal Sing: في الواقع ، صفحة رجل القطران ليست مفيدة. فهو يصف "-C DIR" بأنه "تغيير الدليل DIR". أسوأ من ذلك: "tar -C mydir xf archive.tar" لا يعمل ، في حين أن "tar xf archive.tar -C mydir" يعمل. - Pat Morin


الأجوبة:


لاستخراج أرشيف إلى دليل مختلف عن التيار ، استخدم -Cأو --directoryخيار القطران ، كما هو الحال في

tar -xf archive.tar -C /target/directory

لاحظ أن الدليل الهدف يجب أن يكون موجودًا قبل تشغيل هذا الأمر (يمكن إنشاؤه بواسطة mkdir /target/directory).

إقرأ ال صفحة دليل (أمر: man tar) لخيارات أخرى.


842
2018-05-26 16:16



يجب عليك إنشاء الدليل يدويًا. - Jürgen Paul
هل يمكن تجريد المسار: أي استرداد الملف فقط - zzapper
إذا كان ملف أكبر ، عند تشغيل الأمر ، فكل ما تحصل عليه ليس مخرجًا لعدة ثوانٍ أو حتى دقائق أثناء عمله. يمكنك إصلاح هذا عن طريق إضافة -v العلم (وضع مفصل) الذي يسرد اسم كل ملف أثناء استخراجه. - IQAndreas
consultstan xkcd.com/1168 - Duncan X Simpson
أليس من المدهش أنه بعد كل هذه السنوات ، مع كل الخيارات tar تراكمت ، لا يزال هناك خيار إنشاء دليل الإخراج إذا لم يكن موجودًا؟ - EM0


لاحظ أنه إذا كان tarball الخاص بك يحتوي بالفعل على اسم دليل تريد تغييره ، قم بإضافة --strip-components=1 اختيار:

tar xf archive.tar -C /target/directory --strip-components=1

217
2018-05-21 18:32



شكرا لكم. التنزيلات عبر wget / etc يكون لديك دائمًا دليل "أصل". هذا هو الجواب الكامل IMO - أو يجب أن يلاحظ في الإجابة أعلاه. - bshea


الجمع بين الإجابات والتعليقات السابقة:

ببساطة استخراج محتويات وإنشاء دليل الهدف إذا كان مفقودًا:

mkdir -p /target/directory && tar xf archive.tar -C /target/directory

لاستخراج وإزالة الدليل الجذر (المستوى الأول) في الرمز البريدي

mkdir -p /target/directory && tar xf archive.tar -C /target/directory --strip-components=1

21
2018-06-27 19:29





خيار آخر هو استخدام - أعلى مستوى. سيقوم هذا تلقائيًا بإنشاء دليل يستند إلى اسم الملف الأصلي.

tar zxvf filename.tgz --one-top-level

بالإضافة إلى ذلك ، إذا كنت ترغب في ذلك ، يمكنك تحديد ما تريده وستقوم القطران بإنشائه تلقائيًا.

tar zxvf filename.tgz --one-top-level=new_directory

7
2018-03-22 21:49





مع القطران 1.29 ، يمكننا فقط إضافة اسم الدليل بعد اسم الملف القطران. على سبيل المثال،

tar zxvf tar-file directory-name/

2
2018-06-29 23:00





ما وجدته مثيرًا للاهتمام فيما يتعلق بالاستخراج هو أنه يعتمد على كيفية إنشاء الأرشيف ، انظر هذا المثال

cd /tmp
mkdir folder
touch folder/file.txt

عندما تفعل tar -zcvf folder.tar.gz folder كل شيء كما هو متوقع = عندما تقوم بمسحها الآن ، لن تكون مشحونة (سيتم إنشاء المجلد ، إذا قمت بإزالته) كما /tmp/folder/.

ولكن ، عندما ستقوم بإنشاء القطران tar -zcvf tmp-folder.tar.gz /tmp/folder وقمت بإزالته في مجلد / tmp ، ستكون النتيجة /tmp/tmp/folder الدليل! في مثل هذه الحالة ، يجب عليك فكها إلى / - tar -xf tmp-folder.tar.gz -C /


1
2017-09-01 22:25