سؤال
كيف يمكنني تنشيط المعلومات في 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 ...