سرد محتوى ملف القطران أو الدليل إلى مستوى ما فقط

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

  •  01-10-2019
  •  | 
  •  

سؤال

أتساءل عن كيفية سرد محتوى ملف القطران فقط إلى مستوى ما؟

أفهم tar tvf mytar.tar سأدرج جميع الملفات ، لكن في بعض الأحيان أود أن أرى فقط الدلائل وصولاً إلى مستوى ما.

وبالمثل ، بالنسبة للأمر ls, ، كيف يمكنني التحكم في مستوى الدلائل الفرعية التي سيتم عرضها؟ بشكل افتراضي ، سوف يعرض فقط الدلائل الفرعية المباشرة ، ولكن لا تذهب أبعد من ذلك.

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

المحلول

tar tvf scripts.tar | awk -F/ '{if (NF<4) print }'


drwx------ glens/glens       0 2010-03-17 10:44 scripts/
-rwxr--r-- glens/www-data 1051 2009-07-27 10:42 scripts/my2cnf.pl
-rwxr--r-- glens/www-data  359 2009-08-14 00:01 scripts/pastebin.sh
-rwxr--r-- glens/www-data  566 2009-07-27 10:42 scripts/critic.pl
-rwxr-xr-x glens/glens     981 2009-12-16 09:39 scripts/wiki_sys.pl
-rwxr-xr-x glens/glens    3072 2009-07-28 10:25 scripts/blacklist_update.pl
-rwxr--r-- glens/www-data 18418 2009-07-27 10:42 scripts/sysinfo.pl

تأكد من ملاحظة أن الرقم هو 3+ ولكن العديد من المستويات التي تريدها ، بسبب / في اسم المستخدم / المجموعة. إذا كنت تفعل للتو

tar tf scripts.tar | awk -F/ '{if (NF<3) print }'

scripts/
scripts/my2cnf.pl
scripts/pastebin.sh
scripts/critic.pl
scripts/wiki_sys.pl
scripts/blacklist_update.pl
scripts/sysinfo.pl

إنه اثنين آخرين فقط.

ربما يمكنك أن تنطلق من إخراج ls -R الى هذا awk السيناريو ، وله نفس التأثير.

نصائح أخرى

العمق = 1

tar --exclude="*/*" -tf file.tar


العمق = 2

tar --exclude="*/*/*" -tf file.tar

سيكون من الرائع أن نخبر find أمر للنظر داخل ملف القطران ، لكنني أشك في أن هذا ممكن.

إن الطريق السريع والقبيح (وليس المضمون) سيكون الحد من عدد فواصل الدليل ، على سبيل المثال:

 $ tar tvf myfile.tar | grep -E '^[^/]*(/[^/]*){1,2}$'

ال 2 يطلب من عرض ما لا يزيد عن 2 مائل (في حالتي ، يتم إنشاء واحد بالفعل بواسطة فاصل المستخدم/المجموعة) ، وبالتالي ، لعرض الملفات على الأكثر. قد ترغب في المحاولة بأرقام مختلفة بدلاً من 2.

خيار آخر هو أرشيفت. أنت تركيبها ، وقرص مضغوط فيه. ثم يمكنك فعل أي شيء معه كما هو الحال مع نظام الملفات الآخر.

$ archivemount /path/to/files.tgz /path/to/mnt/folder

يبدو أسرع من طريقة القطران.

أنا أتفق مع إجابة ليونبلوي - لا توجد طريقة للقيام بذلك بشكل مباشر داخل Tarball نفسها.

بخصوص الجزء الثاني من سؤالك ، ls ليس لديه خيار عمق الحد الأقصى. يمكنك أن تتكرر كل شىء مع ls -R, ، لكن هذا ليس مفيدًا جدًا.

ومع ذلك يمكنك القيام بذلك مع كليهما find و tree. على سبيل المثال لسرد الملفات والدلائل على مستوى واحد ، يمكنك القيام بذلك

find -maxdepth 2

أو

tree -L 2

tree لديه أيضا -d الخيار ، الذي يسرد الدلائل بشكل متكرر ، ولكن ليس الملفات ، والتي أجدها أكثر فائدة من -L, ، على العموم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top