Touch Command

1) ما هو أمر touch ولماذا نستخدمه؟

أمر touch له وظيفتان أساسيتان:

  1. إنشاء ملف جديد فارغ إذا كان الملف غير موجود.
  2. تحديث الطوابع الزمنية (timestamps) لملف موجود (مثل وقت التعديل ووقت الوصول) بدون تغيير محتواه.

متى يفيدك؟

  • تجهيز ملفات بسرعة (مثل ملفات مشروع: README.md, index.html)
  • “تحديث” الملف ليظهر كأنه تم تعديله الآن (مفيد في البناء Build أو Makefiles)
  • اختبار صلاحيات/مسارات
  • تعديل وقت الملف لسبب تنظيمي أو لتجربة سكربتات تعتمد على الوقت
2) الصيغة العامة (Syntax)
touch [OPTIONS] FILE...
Bash
  • تقدر تكتب ملف واحد أو عدة ملفات.
  • إذا لم يوجد الملف → ينشئه.
  • إذا موجود → يحدّث الوقت (افتراضيًا يحدّث access + modification).
3) إنشاء ملفات جديدة باستخدام touch
أ) إنشاء ملف واحد
cd ~/project
touch new_file.txt
Bash

تأكد أنه انشأه:

ls -l new_file.txt
Bash
ب) إنشاء عدة ملفات دفعة واحدة
touch file1.txt file2.txt file3.txt
Bash
ج) إنشاء ملفات داخل مجلدات (مع المسار)
touch ~/project/logs.txt
touch ~/project/docs/readme.txt
Bash

ملاحظة مهمة: إذا كان المجلد docs غير موجود سيعطيك خطأ.
الحل: أنشئ المجلد أولًا:

mkdir -p ~/project/docs
touch ~/project/docs/readme.txt
Bash
د) إنشاء ملف باسم فيه مسافات

لازم تستخدم اقتباس:

touch "My Notes.txt"
Bash
4) فهم الـ Timestamps ببساطة (مهم)

في لينكس غالبًا تهمنا أوقات مثل:

  • mtime: وقت آخر تعديل للمحتوى (Modification time)
  • atime: وقت آخر وصول/قراءة (Access time)

لعرض أوقات الملفات بوضوح استخدم:

stat existing_file.txt
Bash

أو بشكل مختصر (لعرض mtime):

ls -l existing_file.txt
Bash
5) تحديث أوقات الملفات باستخدام touch
أ) التحديث الافتراضي (يحدث atime و mtime)
touch existing_file.txt
Bash
ب) تحديث وقت الوصول فقط: -a
touch -a existing_file.txt
Bash
ج) تحديث وقت التعديل فقط: -m
touch -m existing_file.txt
Bash
6) تعيين وقت محدد (مهم جدًا)
أ) باستخدام -d (سهل وواضح)
touch -d "2023-04-01 10:30:00" existing_file.txt
Bash

تأكد:

stat existing_file.txt
Bash
ب) باستخدام -t (صيغة رقمية)

الصيغة:
[[CC]YY]MMDDhhmm[.ss]

مثال (2023-04-01 10:30):

touch -t 202304011030 existing_file.txt
Bash

مثال مع ثواني:

touch -t 202304011030.45 existing_file.txt
Bash
7) نسخ الوقت من ملف إلى ملف آخر: -r (مفيد جدًا)

إذا تريد تجعل ملف يأخذ نفس وقت ملف ثاني:

touch -r source.txt target.txt
Bash

يعني “اجعل target مثل source في timestamps”.

8) منع إنشاء الملف إذا غير موجود: -c

أحيانًا تريد فقط تحديث الوقت إذا الملف موجود، وإذا غير موجود لا تنشئه.

touch -c maybe_exists.txt
Bash

هذا مفيد في السكربتات لتجنب إنشاء ملفات بالغلط.

9) استخدام touch مع الأقنعة/wildcards (تنبيه مهم)

في النص الذي أرسلته كان مثال:

touch *.md
Bash

تنبيه: هذا لا “ينشئ كل ملفات md من العدم”
الـ * يعمل على الملفات الموجودة بالفعل. يعني:

  • إذا يوجد ملفات .md → سيحدّث أوقاتها
  • إذا لا يوجد أي .md → غالبًا سيعطي خطأ مثل:
    touch: cannot touch '*.md': No such file or directory
إذا تريد إنشاء عدة ملفات بنمط معيّن فعلًا (مثال 1..5):
touch file{1..5}.md
Bash

ينشئ:

  • file1.md file2.md file3.md file4.md file5.md

مثال آخر:

touch chapter_{01..10}.txt
Bash
10) أمثلة عملية مفيدة للمبتدئ
أ) تجهيز مشروع بسرعة
mkdir -p ~/project/myapp
cd ~/project/myapp
touch README.md main.py .gitignore
ls -la
Bash
ب) معرفة الفرق بين atime و mtime بالتجربة
cd ~/project
touch demo.txt
stat demo.txt

cat demo.txt > /dev/null
stat demo.txt

echo "hi" >> demo.txt
stat demo.txt
Bash
  • القراءة تغيّر atime (حسب إعدادات النظام)
  • الكتابة تغيّر mtime
11) أخطاء شائعة وحلولها
أ) “No such file or directory” عند مسار داخل مجلد غير موجود
touch ~/project/abc/file.txt
Bash

الحل:

mkdir -p ~/project/abc
touch ~/project/abc/file.txt
Bash
ب) مشكلة touch *.md

إذا ما في ملفات md موجودة، الأفضل تستخدم:

touch file{1..3}.md
Bash
12) تدريب سريع (Practice)

نفذ التالي بالترتيب:

cd ~/project
mkdir -p touch_practice
cd touch_practice

touch a.txt
sleep 1
touch -m a.txt
stat a.txt

touch file{1..5}.md
ls -l

touch -d "2023-04-01 10:30:00" a.txt
stat a.txt

touch -c not_here.txt
ls -l
Bash
هل الشرح في المحتوى الأصلي كافي؟

هو جيد كبداية، لكن احتاج تصحيح/توضيح نقطة مهمة جدًا:

{1..N} لإنشاء ملفات كثيرة بشكل صحيح

touch *.md لا ينشئ ملفات جديدة من الصفر إلا إذا كان هناك ملفات مطابقة موجودة.
والشرح الموسع اللي فوق أضاف أهم الأشياء العملية:

stat للفهم الحقيقي للأوقات

-t صيغة الوقت الرقمية

-r نسخ الوقت من ملف لآخر

-c منع إنشاء ملفات بالغلط