unzip
لديه خيار أنيق -j
، حيث يتم تجاهل بنية دليل الأرشيف ، ويتم استخراج جميع الملفات في نفس الدليل.
هل هناك طريقة لجعل tar
يعمل بنفس الطريقة؟ لا شيء في صفحة الرجل يبدو أنه يشير إلى ذلك.
لذلك ، هل هناك أداة بديلة ، ويفضل أن تكون برمجيات حرة ، ستقوم بذلك؟
يعيش جنو تار على التهاب السيلكون ، لذلك من الطبيعي أن يكون لديه أيضًا بعض الخيارات لذلك.
http://www.gnu.org/software/tar/manual/html_node/transform.html
إذا كنت ترغب فقط في إزالة بعض مقاطع المسار ، فغالبًا ما تقوم --strip-components=n
أو --strip=n
بما يلي:
tar xvzf tgz --strip=1
ولكن من الممكن أيضًا إعادة كتابة الملفات المراد استخراجها (الإشارات هي --transform
أو --xform
وقبول ereg مع /x
modifer):
tar xvzf tgz --xform='s#^[^/]+#.#x'
# or 's#^.+/##x' for discarding all paths
لإدراج tar ، تحتاج إلى خيار --show-transformed
الإضافي:
tar tvzf tgz --show-transformed --strip=1 --xform='s/abc/xyz/x'
أعتقد أن خيارات إعادة الكتابة تعمل أيضًا للتغليف ، وليس فقط للاستخراج. لكن pax
من الواضح أن بناء جملة أجمل.
يمكنك أن تفعل ذلك بسهولة إلى حد ما في خطوتين. التكيف حسب الضرورة:
$ mkdir /tmp/dirtree
$ tar xfz /path/to/archive -C /tmp/dirtree
$ find /tmp/dirtree -type f -exec mv -i {} . \;
$ rm -rf /tmp/dirtree
pax
تستطيع أن تفعل ذلك:
pax -v -r -s '/.*\///p' < archive.tar
أو
zcat archive.tar.gz | pax -v -r -s '/.*\///p'
يمكنك التحقق من عملية استبدال الاسم أولاً عن طريق حذف الخيار -r
.
حل ممكن لا يتطلب تثبيت أي شيء.
tar tvf
للاستيلاء على جميع الملفات من tarballقم باستخراج هذه الملفات بشكل فردي - قم باستخراج tar إلى stdout وإعادة التوجيه إلى $ filename
tar -tvf $1 | grep -v "^d" | \
awk '{for(i=6;i<NF+1;i++) {printf "%s ",$i};print ""}' |\
while read filename
do
tar -O -xf $1 "$filename" > `basename "$filename"`
done
حفظ كـ extract.sh وتشغيله كـ extract.sh myfile.tar
. كما سيتم الكتابة فوق أي أسماء ملفات مكررة تمت مصادفتها في الدلائل التي تم سحبها من لعبة tarball.