سؤال

كيف يمكنني تنشيط المعلومات في tar تحديد أسماء الملف؟

هل كانت مفيدة؟

المحلول

شيء مثل:

tar cfz foo.tgz -T -

لكن ضع في اعتبارك أن هذا لن ينجح لجميع أسماء الملفات الممكنة ؛ يجب أن تفكر في --null الخيار والتغذية tar من عند find -print0. (ال xargs على سبيل المثال ، لن يعمل تمامًا في قوائم الملفات الكبيرة لأنه سيفرد متعددة tar الأوامر.)

نصائح أخرى

كما أشار بالفعل من قبل Geekosaur ، ليست هناك حاجة لتنشيط إخراج find ل xargs لأنه من الممكن أن تنطلق من إخراج find مباشرة الى tar استخدام find ... -print0 | tar --null ....

لاحظ الاختلافات الطفيفة بين gnutar و bsdtar في استبعاد ملف الأرشيف على الرغم من.

# exclude file.tar.gz anywhere in the directory tree to be tar'ed and compressed
find . -print0 | gnutar --null --exclude="file.tar.gz" --no-recursion -czf file.tar.gz --files-from -
find . -print0 | bsdtar --null --exclude="file.tar.gz" -n -czf file.tar.gz -T -

# bsdtar excludes ./file.tar.gz in current directory by default
# further file.tar.gz files in subdirectories will get included though
# bsdtar: ./file.tar.gz: Can't add archive to itself
find . -print0 | bsdtar --null -n -czf file.tar.gz -T -

# gnutar does not exclude ./file.tar.gz in current directory by default
find . -print0 | gnutar --null --no-recursion -czf file.tar.gz --files-from -

تمتد إجابة geekosaur:

find /directory | tar -cf archive.tar -T -

يمكنك استخدام stdin مع -T اختيار.

لاحظ أنه إذا قمت بتصفية الملفات باستخدام بعض الشرط (على سبيل المثال -name الخيار) بشكل عام تحتاج إلى استبعاد الدلائل في الأنبوب ، على خلاف ذلك ، ستعالج TAR جميع محتواها ، وهذا ليس ما تريده. لذلك ، استخدم:

find /directory -type f -name "mypattern" | tar -cf archive.tar -T -

إذا لم تستخدم -type, ، جميع محتوى الدلائل المطابقة "mypattern" سوف تتم اضافته !

بدلاً من استخدام الأنابيب ، يمكنك استخدام backticks ، على سبيل المثال:

tar cvzf archive.tgz `ls -1 *`

بدلاً من ls -1 * يمكنك وضع أي أمر آخر ينتج قائمة من ملفات الأرشفة

find /directory > filename
tar -T filename -cf archive.tar

ال tar تم تنفيذ البرنامج بعدة طرق. على سبيل المثال ، في إصدار IBM من UNIX ، AIX, tar يستخدم -L الخيار بدلا من -T, ويتطلب ملفًا بدلاً من السماح - للإشارة إلى stdin:

Usage: tar -{c|r|t|u|x} [ -BdDEFhilmopRUsvwZ ] [ -Number ] [ -f TarFil e ]
       [ -b Blocks ] [ -S [ Feet ] | [ Feet@Density ] | [ Blocksb ] ]
       [ -L InputList ] [-X ExcludeFile] [ -N Blocks ] [ -C Directory ] File ...
Usage: tar {c|r|t|u|x} [ bBdDEfFhilLXmNopRsSUvwZ[0-9] ] ]
       [ Blocks ] [ TarFile ] [ InputList ] [ ExcludeFile ]
       [ [ Feet ] | [ Feet@Density ] | [ Blocksb ] ] [-C Directory ] File ...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top