أمر Linux Tar: ضغط دليل ولكنه يتفوق على الدليل الفرعي

StackOverflow https://stackoverflow.com/questions/1053065

  •  20-08-2019
  •  | 
  •  

سؤال

سيناريو: لديّ دليل على خادم يستضيف موقع الويب الخاص بي يحتوي على مئات الصور التي يقدمها المستخدم. أقوم بإنشاء برنامج نصي احتياطي يأخذ جميع الصور من الدليل ويضغطها في ملف .tar.gz واحد. الأمر الذي لدي حتى الآن هو:

tar -czpf/path/to/backups/my_backup.tar.gz path/to/images/

مشكلة: لا داخل طريقي/إلى/الصور/لدي دليل يسمى TMP/. عندما أقوم بتشغيل الأمر ، أحصل على ملف .tar.gz يحتوي على جميع الصورة في المسار/إلى/الصور/الدليل والدليل الفرعي يسمى TMP/.

سؤال: كيف يمكنني الحصول على الأمر لتخطي/ عدم تضمين الدليل TMP/ SubdOctory في ملف .tar.gz.

شكرا مليون مقدما.

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

المحلول

أنت تبحث عن --exclude جدال.

--exclude=PATTERN

يجد بعض المستخدمين exclude الخيارات مربكة. فيما يلي بعض المزالق الشائعة:

  • وضع التشغيل الرئيسي لـ tar لا يعمل على اسم المسار المدرج بشكل صريح على سطر الأوامر إذا تم استبعاد أحد مكونات اسم الملف الخاصة به. في المثال أعلاه ، إذا قمت بإنشاء أرشيف واستبعاد الملفات التي تنتهي *.o, ، ولكن بشكل صريح تسمية الملف dir.o/foo بعد كل الخيارات المدرجة ،dir.o/foo سيتم استبعاد من الأرشيف.

  • يمكنك أحيانًا الخلط بين معاني --exclude=PATTERN و--exclude-from=FILE-OF-PATTERNS (-X FILE-OF-PATTERNS). كن حذرا: استخدم --exclude=PATTERN عندما يتم إعطاء الملفات المراد استبعادها كنمط على سطر الأوامر. يستخدم--exclude-from=FILE-OF-PATTERNS لتقديم اسم ملف يحتوي على قائمة بالأنماط ، واحدة لكل سطر ؛ يمكن لكل من هذه الأنماط استبعاد الصفر أو واحد أو العديد من الملفات.

  • عندما تستخدم --exclude=PATTERN, ، تأكد من اقتباس المعلمة النمط ، لذلك GNU tar يرى شخصيات Wildcard مثل *. إذا لم تفعل ذلك ، فقد تقوم القشرة بتوسيع * نفسه باستخدام الملفات في متناول اليد ، لذلك tar قد يتلقى قائمة بالملفات بدلاً من نمط واحد ، أو لا شيء على الإطلاق ، مما يجعل الأمر غير قانوني إلى حد ما. هذا قد لا يتوافق مع ما تريد.

على سبيل المثال ، اكتب:

$ tar -c -f ARCHIVE.TAR --exclude '*.o' DIRECTORY

عوضا عن:

$ tar -c -f ARCHIVE.TAR --exclude *.o DIRECTORY
  • يجب استخدام استخدام بناء جملة shell أو globbing بدلاً من regexpبناء الجملة ، عند استخدام خيارات استبعاد في tar. إذا حاولت الاستخدامregexp بناء جملة لوصف الملفات المراد استبعادها ، قد يفشل أمرك.

نصائح أخرى

tar -czpf /path/to/backups/my_backup.tar.gz --exclude path/to/images/tmp path/to/images/

هذا يجب أن يعمل (على افتراض GNU TAR):

tar -czpf /path/to/backups/my_backup.tar.gz --exclude=tmp path/to/images/
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top