استخدم اختصارات Mac لتمرير نص إلى برنامج نصي للصدفة يختار أحدث ملف نصي عُدّل في مجلد محلي واحد، ثم يُلحق به إدخالك. يستخدم هذا الشرح ملفات عيّنة مؤقتة ويتوقف إذا كان المجلد فارغًا أو تساوى توقيت أحدث الملفات.

المهمة هنا محددة: إضافة إدخال قصير إلى ملف نص عادي موجود من دون اختيار الملف يدويًا في كل مرة. توثّق Apple دعم البرامج النصية للصدفة داخل اختصارات Mac. يجمع سير العمل أدناه بين هذه الإمكانية المدعومة وسلوك اختيار الملفات والإلحاق الموثّق في zsh. التعرّف على الاختصارات لـ macOS

حدّد المقصود بـ«أحدث ملف»

تعرّف هذه المقالة الأحدث بأنه الأكثر حداثة من حيث وقت التعديل. لا يأخذ البرنامج النصي في الاعتبار سوى الملفات العادية المرئية التي تنتهي أسماؤها بـ .txt بأحرف صغيرة، والموجودة مباشرة داخل المجلد المحدد. ويستبعد المجلدات الفرعية والروابط الرمزية. تستند قواعد الاختيار هذه إلى أنماط أسماء الملفات ومؤهلات zsh. التوسيع

يؤثر هذا التعريف في مرات التشغيل المتكررة. بعد إلحاق نص بملف، يتغير وقت تعديله، لذا سيظل عادةً أحدث ملف مؤهل. إذا كان قصدك متابعة أحدث مستند أُنشئ، فذلك معيار مختلف؛ لا تفترض أن سير العمل هذا يختار الملفات حسب تاريخ الإنشاء.

قبل إنشاء الاختصار، اختر القاعدة التي تناسب مهمتك:

المهمة المقصودة هل يطابقها هذا المثال؟
الإلحاق بملف .txt عُدّل مؤخرًا نعم
الإلحاق بالملف الذي يحمل أحدث تاريخ في اسمه لا؛ لا تُفسّر أسماء الملفات على أنها تواريخ
الإلحاق بأحدث ملف أُنشئ لا؛ لا يُستخدم وقت الإنشاء
تضمين الملفات داخل المجلدات الفرعية لا؛ يقتصر الاختيار على مجلد واحد
الإلحاق بمستند منسق أو ملف PDF لا؛ يكتب هذا المثال نصًا عاديًا

يوفر Finder وسيلة تحقق مرئية مفيدة. افتح المجلد في عرض القائمة وانقر على عنوان عمود Date Modified؛ وانقر مرة أخرى عند الحاجة لإظهار أحدث عنصر أولًا. توثّق Apple كلاً من فرز الأعمدة وعكس الترتيب. يساعدك عرض Finder على فحص النتيجة، لكن البرنامج النصي يجري اختياره بنفسه. فرز العناصر وترتيبها في Finder على Mac

أنشئ مجلدًا تجريبيًا مؤقتًا

يستخدم المثال مجلدًا باسم Shortcut Append Demo داخل مجلدك الرئيسي. يتوقف الإعداد عمدًا إذا كان هذا الاسم مستخدمًا بالفعل، بدلًا من إعادة استخدام محتوياته. وينشئ ملفين نصيين اصطناعيين، مع فاصل زمني قدره ثانيتان، بحيث يُفترض أن يكون وقت تعديل الملف الثاني أحدث.

افتح Terminal، والصق كتلة الإعداد الكاملة هذه، ثم اضغط على Return. تُشغّل كتلة here-doc المقتبسة الأوامر في عملية zsh منفصلة، لذا يؤدي فشل الإعداد إلى إنهاء تلك العملية.

/bin/zsh <<'ZSH'
emulate -L zsh
setopt ERR_EXIT
folder="$HOME/Shortcut Append Demo"

if ! /bin/mkdir "$folder"; then
  printf '%s\n' 'Setup stopped: use a new folder name if this one exists.' >&2
  exit 1
fi

printf '%s\n' 'Sample entry: blue notebook.' > "$folder/older.txt"
/bin/sleep 2
printf '%s\n' 'Sample entry: green notebook.' > "$folder/newer.txt"
printf 'Example folder: %s\n' "$folder"
ZSH

يستخدم الإعداد إعادة توجيه المخرجات لإنشاء الملفات، وذلك فقط بعد نجاح إنشاء المجلد الجديد. تميّز Apple بين إعادة توجيه المخرجات العادية، التي تكتب مخرجات الأمر إلى ملف، وإعادة توجيه الإلحاق، التي تضيف المخرجات في النهاية. إعادة توجيه مدخلات Terminal ومخرجاته على Mac

إذا أفاد الإعداد بأن المجلد موجود بالفعل، فاختر اسمًا مؤقتًا آخر وغيّر تعيين المجلد في الإعداد والبرنامج النصي للاختصار أدناه. لا تُعِد تشغيل أسطر الكتابة الفردية على مجلد موجود.

أنشئ الاختصار وحافظ على إدخال النص

أنشئ اختصارًا جديدًا في تطبيق Shortcuts وسمّه Append to Newest Text File. استخدم بحث الإجراءات لإضافة الإجراءات أدناه. توثّق Apple كيفية البحث في مكتبة الإجراءات والتحقق من الإدخال الذي يقبله كل إجراء والمخرجات الناتجة عنه باستخدام Show Info. التنقل في قائمة الإجراءات في Shortcuts على Mac

  1. أضف إجراء Text يتضمن الإدخال الاصطناعي Sample entry: orange notebook.
  2. أضف Run Shell Script بعده مباشرة.
  3. عيّن الصدفة إلى /bin/zsh.
  4. عيّن إدخال البرنامج النصي إلى مخرجات إجراء Text السابق.
  5. عيّن Pass Input إلى as arguments.
  6. استبدل محتوى حقل البرنامج النصي بالكامل بالبرنامج الوارد في القسم التالي.

الربط المقصود هو قيمة Text واحدة في وسيط واحد للبرنامج النصي. يقرأ البرنامج النصي هذا الوسيط بوصفه $1. ومخرجات النجاح هي تأكيد نصي يتضمن مسار الوجهة؛ وهذا المسار ليس كائن ملف في Shortcuts، كما أن المخرجات ليست المحتويات الكاملة للملف.

أبقِ الإدخال متصلًا بمخرجات Text. تمرير ملف أو قائمة بأسماء الملفات أو إدخال الاختصار غير المرتبط سيغيّر ما يصل إلى البرنامج النصي. ويتحقق البرنامج النصي من عدد الوسائط كي لا تتحول مجموعة غير متوقعة من المدخلات إلى عدة إدخالات ملحقة.

إذا كانت البرامج النصية معطّلة، فافتح Shortcuts > Settings، واختر Advanced، ثم فعّل Allow Running Scripts. هذه هي عناصر التحكم التي توثّقها Apple للسماح بتشغيل البرامج النصية في الاختصارات. تعليمات Apple لإعدادات البرامج النصية

أضف البرنامج النصي الذي يختار ملفًا ويلحق النص

الصق البرنامج كاملًا في Run Shell Script. لا يحتاج إلى أدوات مُنزّلة أو ملف برنامج نصي منفصل. يتطابق تعيين المجلد مع الإعداد المؤقت أعلاه.

emulate -L zsh
unsetopt CLOBBER APPEND_CREATE

fail() {
  printf '%s\n' "$1" >&2
  exit 1
}

(( $# == 1 )) || fail 'Expected exactly one text input.'
[[ -n "$1" ]] || fail 'The text input is empty.'

folder="$HOME/Shortcut Append Demo"
[[ -d "$folder" ]] || fail 'The example folder does not exist.'

files=( "$folder"/*.txt(N.om) )
(( ${#files} > 0 )) || fail 'No eligible .txt files were found.'

newest="${files[1]}"

if (( ${#files} > 1 )); then
  [[ "$newest" -nt "${files[2]}" ]] ||
    fail 'The newest timestamp is tied or the folder changed. Check the files.'
fi

[[ -f "$newest" && ! -L "$newest" ]] ||
  fail 'The selected file is no longer an eligible regular file.'
[[ -w "$newest" ]] || fail 'The selected file is not writable.'

if ! printf '\n%s\n' "$1" >> "$newest"; then
  fail 'Append failed; inspect the selected file before retrying.'
fi

printf 'Appended to: %s\n' "$newest"

ينشئ تعبير الاختيار مصفوفة من مسارات الملفات المطابقة. في (N.om)، تسمح N بعدم وجود تطابق، وتقيّد . التطابقات بالملفات العادية، وترتّب om الملفات حسب وقت التعديل مع إظهار الأحدث أولًا. يحول الاحتفاظ بالمسارات في مصفوفة دون تقسيم أسماء الملفات عند المسافات. التوسيع

يشترط الفحص التالي أن يكون الملف الأول أحدث من الثاني حصرًا. إذا تساوى وقت تعديلهما، يتوقف الاختصار بدلًا من اختيار أحدهما بصمت. توثّق zsh العامل -nt لمقارنة عمر الملفات، إلى جانب اختبارات الملف العادي والرابط الرمزي والملف القابل للكتابة المستخدمة هنا. التعبيرات الشرطية

يستخدم أمر الإلحاق تنسيقًا ثابتًا printf ويمرر إدخالك بوصفه وسيط %s. لذلك تُعامل علامات النسبة المئوية والشرطات المائلة العكسية في الإدخال كنص، لا كتعليمات تنسيق إضافية. يفصل السطر الجديد الأول الإدخال عن النص الموجود؛ وينهيه السطر الجديد الأخير. إذا كان الملف ينتهي بالفعل بسطر جديد، فسينتج عن ذلك سطر فارغ بين الإدخالات. أوامر الصدفة المضمنة

كما يلغي البرنامج النصي إعدادَي CLOBBER وAPPEND_CREATE. توثّق zsh أنه عند إلغاء كلا الخيارين، يفشل توجيه الإلحاق إذا لم تكن الوجهة موجودة. وهذا مهم إذا اختفى الملف المحدد قبل الإلحاق: ينبغي أن يُبلغ البرنامج النصي عن فشل بدلًا من إنشاء ملف بديل في المسار القديم. إعادة التوجيه

تحقّق من النتيجة باستخدام الملفات التجريبية

شغّل الاختصار مرة واحدة. مع مجلد العينات كما هو، الوجهة المتوقعة هي newer.txt. افتح ذلك الملف وتحقق من المحتوى التالي. هذه هي النتيجة المتوقعة استنادًا إلى المثال، وليست ادعاءً بإجراء اختبار مكتمل على واجهة Mac.

Sample entry: green notebook.

Sample entry: orange notebook.

افتح older.txt أيضًا. ينبغي أن يظل محتواه مقتصرًا على Sample entry: blue notebook. ويؤكد التحقق من الملفين جزأي المهمة: اختيار وجهة واحدة والحفاظ على الملف الآخر.

جرّب إدخالًا اصطناعيًا ثانيًا بتغيير إجراء Text إلى Sample entry: yellow notebook. ثم التشغيل مرة أخرى. توقّع إدخالًا آخر يفصله سطر فارغ في newer.txt، ما لم يصبح ملف مؤهل آخر أحدث. تشغيل الاختصار مرتين بالإدخال نفسه يُلحق ذلك الإدخال مرتين؛ فهذا البرنامج لا يكشف الإدخالات المكررة.

تمت مراجعة هذه الأمثلة بالاستناد إلى الوثائق، لكن لم تُنفّذ هنا: فالبيئة المتاحة لا تتضمن macOS Shortcuts ولا zsh. أجرِ فحص الملفات المؤقتة على Mac قبل تعديل تعيين المجلد.

افهم المجلدات الفارغة والتعارضات وتغيّر الملفات

يتطلب سير العمل وجهة موجودة. يؤدي غياب المجلد أو فراغه أو احتواؤه على عناصر غير مؤهلة فقط إلى ظهور خطأ قبل الإلحاق. ولا ينشئ ملفًا افتراضيًا أو يختار مجلدًا فرعيًا أو ينتقل إلى مستند مختلف الاسم.

تُعالج تعارضات الأسماء بتجنب إنشاء الوجهة تمامًا. يتوقف الإعداد إذا كان اسم مجلده مستخدمًا بالفعل. أثناء تشغيل الاختصار المعتاد، يحتفظ الملف المحدد باسمه الحالي: فالبرنامج النصي لا يعيد تسميته ولا يحفظ نسخة ثانية. ويضبط سلوك الملف المفقود المنفصل خياري الإلحاق في zsh كما هو موثّق. إعادة التوجيه

استخدم تسلسل التشخيص القصير هذا إذا اختلفت النتيجة عن توقعاتك:

  1. تحقق من تعيين المجلد. يجب أن يطابق المجلد الذي أنشأته أثناء الإعداد.
  2. تحقق من الأهلية. يشمل نمط العينة الملفات العادية المرئية التي تنتهي أسماؤها بـ .txt بأحرف صغيرة في المستوى الأعلى من المجلد.
  3. تحقق من ترتيب التعديل. افحص Date Modified في Finder، وتذكّر أن تعديل ملف قد يجعله الوجهة التالية.
  4. تحقق من تساوي التوقيت. عدّل ملف العينة المقصود واحفظه لاحقًا، ثم افحص الترتيب مجددًا.
  5. تحقق من اتصال الإجراء. يجب أن تصل قيمة نصية واحدة إلى الصدفة بوصفها وسيطًا واحدًا.

صُمم البرنامج النصي لمجلد لا يتغير أثناء التشغيل. فالاختيار والكتابة عمليتان منفصلتان: قد تعدّل عملية أخرى ملفًا أو تستبدله أو تضيف ملفًا بينهما. ولا تجعل الفحوصات سير العمل معاملة ذرية، وقد يؤدي فشل الكتابة إلى إلحاق إدخال جزئي. افحص الملف قبل إعادة المحاولة بعد خطأ في الإلحاق.

متى تكون فلاتر الملفات الأصلية مناسبة

توثّق Apple إجراء Filter Files على أنه يقبل المحتوى، ويضيّق نطاقه باستخدام الفلاتر، ثم يمرر النتائج المطابقة إلى الخطوة التالية. ويمكن لعناصر التحكم العامة في الفلاتر فرز النتائج وتحديد عددها. تساعد هذه العمليات على اختيار ملف؛ لكنها لا تُلحق النص بحد ذاتها. مقدمة إلى إجراءات Find وFilter، إضافة معلمات الفلترة

يجمع هذا الشرح الاختيار والكتابة في البرنامج النصي للصدفة لتوضيح نمط الملفات وسلوك التساوي واشتراط وجود الملف. إذا أنشأت سلسلة مختلفة باستخدام إجراءات الملفات، فتحقق أولًا من Show Info لكل إجراء: فقيمة File ومحتوى الملف المحوّل إلى Text والمسار المُمثّل كنص قيم مختلفة. توفر Apple أوصاف الإجراءات هذه تحديدًا للتعرّف على أنواع الإدخال والإخراج. التنقل في قائمة الإجراءات في Shortcuts على Mac

بعد أن يعمل المثال كما هو متوقع، حافظ على الشروط الواضحة نفسها عند تعديله: إدخال نصي واحد، ومجلد محلي محدد، وملف مؤهل واحد هو الأحدث بفارق حاسم. يجعل ذلك كل تشغيل قابلًا للتوقع ويوفر نقطة محددة للتحقق منها كلما توقف الاختصار.

المصادر