أمر Linux Tar: ضغط دليل ولكنه يتفوق على الدليل الفرعي
-
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
, ، تأكد من اقتباس المعلمة النمط ، لذلك GNUtar
يرى شخصيات 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/