كيف يمكنني إلحاق جميع الملفات في الحالية وحرجية كحجج الأوامر؟

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

سؤال

لدي دليل مثل هذا:

dir
dir/somefile.txt
dir/subdir/subsub/somefile2.txt
dir/subdir2/somefile.txt

وأريد فتح جميع الملفات في جميع الدلائل الفرعية في مثيل واحد من الأمر. كنت أحاول العثور على -EXEC، أو Xargs، ولكن هذه ملف مفتوحة كل ملف مع مثيل منفصل للأمر.

أساسا، أريد شيئا ينتهي مثلkate dir/somefile.txt dir/subdir/subsub/somefile2.txt dir/subdir2/somefile.txt, ، ولكن بالنسبة لأي عدد من الملفات في أي عدد من الدلائل الفرعية. أنا أستخدم باش، لكن أي اقتراحات نصية بخير.

توضيح: لم أقصد فقط ملفات .txt، ولكن أي ملف ASCII (أي.. .php، .txt، .html، إلخ.)

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

المحلول

يحاول

kate `find . -name \*.txt -type f`

أين ال -type f يمنعك من ضرب الدلائل.

هنا مثال باستخدام ls -1 بدلا من kate:

edd@ron:~/src/debian/R$ ls -1 `find . -type f -name \*.txt`
./R-2.10.0/src/extra/graphapp/readme.txt
./R-2.10.0/src/extra/xdr/copyrght.txt
./R-2.10.0/src/extra/xdr/README.txt
./R-2.10.0/src/gnuwin32/fixed/etc/rgb.txt
./R-2.10.0/src/gnuwin32/installer/CustomMsg.txt
./R-2.10.0/src/library/grid/inst/doc/changes.txt
./R-2.10.0/src/unix/system.txt
./R-2.9.2-ra-1.2.8/src/extra/graphapp/readme.txt
./R-2.9.2-ra-1.2.8/src/extra/xdr/copyrght.txt
./R-2.9.2-ra-1.2.8/src/extra/xdr/README.txt
./R-2.9.2-ra-1.2.8/src/gnuwin32/fixed/etc/rgb.txt
./R-2.9.2-ra-1.2.8/src/gnuwin32/installer/CustomMsg.txt
./R-2.9.2-ra-1.2.8/src/library/grid/inst/doc/changes.txt
./R-2.9.2-ra-1.2.8/src/unix/system.txt
edd@ron:~/src/debian/R$

وإذا كنت تريد حقا كل الملفات في الدلائل الفرعية، تبسط المكالمة

kate `find . -type f`

إذا كنت في dir/ او اخرى

kate `find dir -type f`

نصائح أخرى

هناك العديد من الخيارات الممكنة لهذا. تستند هذه الإجابات إلى السيناريو الخاص بك حيث تعرف أن جميع الملفات يمكن فتحها بواسطة Kate، وتريد فتح ملفات مع أي امتداد.

find dir -type f -exec kate {} +  

kate $(find dir -type f)

kate `find dir -type f`

الأشكال الثانية والثالثة مكافئة تقريبا. الفرق الرئيسي [1] هو أن الإصدار الأول سوف يتعامل مع الملفات مع المسافة البيضاء في اسمها، في حين أن الثانية والثالثة لا.

1] شكرا لتشير إلى هذا nvram، لم أكن أدرك عندما سجلت الإجابة لأول مرة.

kate $(find dir -type f)

أنت إما غير مألوف جدا xargs, ، أو أنك لا تستخدمه بشكل صحيح، لأن ما تحاول القيام به هو بالضبط المشكلة تم تصميم Xargs لحلها: بالنظر إلى قائمة طويلة تعسفية من السلاسل، قم بتمريرها كوسائط إلى برنامج في عدد قليل من عمليات الإعدام قدر الإمكان أثناء عدم تجاوز حدود النظام على عدد الحجج التي يمكن أن يستغرق فيها البرنامج.

أنت على حق ل find ... -exec, ، ولكن يمكن أن تكون ثابتة أيضا. فقط اضف + عند نهاية ال find القيادة وفويلا، يتصرف مثل xargs.

لا شيء من الحلول أعلاه هذا الاستخدام kate $(...) (أو ما يعادله مع BackTicks) يعمل بشكل عام (لا يدعمون أسماء الملفات مع المسافات، لن يعمل على الإطلاق إذا كانت قائمة الملفات طويلة جدا). كلاهما find ... + و xargs الحصول على هذه القيود هذه.

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