سرد محتوى ملف القطران أو الدليل إلى مستوى ما فقط
سؤال
أتساءل عن كيفية سرد محتوى ملف القطران فقط إلى مستوى ما؟
أفهم 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
, ، على العموم.