إدارة الملفات في Bash: فحص، قراءة، نسخ، وتنظيف آمن

جزء كبير من سكربتات Bash يدور حول الملفات: قراءة، نسخ، تنظيف، وإنشاء نسخ احتياطية.

في هذا الدرس ستتعلم أنماط عملية وآمنة للتعامل مع الملفات داخل السكربتات.

فحص وجود الملفات والمجلدات في Bash

FILE="/etc/passwd"
DIR="/var/log"

if [ -f "$FILE" ]; then
  echo "File exists"
fi

if [ -d "$DIR" ]; then
  echo "Directory exists"
fi
الاختبار المعنى
-f ملف عادي موجود
-d مجلد موجود
-e أي كيان موجود
-s ملف غير فارغ

إنشاء الملفات والمجلدات داخل سكربت

mkdir -p /tmp/myapp/logs
touch /tmp/myapp/logs/app.log

استخدم -p مع mkdir لتجنب الخطأ إذا المسار موجود مسبقًا.

القراءة من ملف سطرًا بسطر

#!/bin/bash
INPUT_FILE="users.txt"

while IFS= read -r line; do
  echo "User: $line"
done < "$INPUT_FILE"

هذا النمط يحافظ على المسافات والـ backslashes بشكل صحيح.

المرور على ملفات مجلد باستخدام for

for file in /var/log/*.log; do
  echo "Processing $file"
done

مفيد لتطبيق نفس العملية على مجموعة ملفات.

نسخ ونقل وحذف داخل سكربتات Bash

cp source.txt backup/source.txt
mv old.txt archive/old.txt
rm -f temp.txt
تحذير: تجنب استخدام الحذف العنيف داخل السكربت بدون تحقق من المسار والقيم.

نمط نسخة احتياطية بسيط

#!/bin/bash
SRC="/etc"
DEST="/tmp/backups"
DATE=$(date +%F_%H-%M)

mkdir -p "$DEST"
tar -czf "$DEST/etc_backup_$DATE.tar.gz" "$SRC"
echo "Backup created at $DEST"

استخدام find داخل سكربتات الملفات

find /var/log -type f -name "*.log" -mtime +7
find /tmp -type f -size +100M

هذا يساعدك على تنظيف الملفات القديمة أو الضخمة تلقائيًا.

تسجيل العمليات في log file

LOG_FILE="/tmp/script.log"
echo "[INFO] Start at $(date)" >> "$LOG_FILE"
echo "[INFO] Done" >> "$LOG_FILE"

إضافة logs تجعل تشخيص مشاكل السكربت أسهل بكثير.

أفضل ممارسات Bash File Ops

  • اقتبس المسارات دائمًا: "$path"
  • تحقق من وجود الملفات قبل العمل عليها
  • استخدم أسماء واضحة للمجلدات المؤقتة والنسخ
  • اكتب logs وارجع exit codes مناسبة عند الفشل

تمرين عملي: سكربت فحص ملفات وإنشاء Backup

#!/bin/bash
SOURCE_DIR="/tmp/lab-source"
BACKUP_DIR="/tmp/lab-backup"

mkdir -p "$SOURCE_DIR" "$BACKUP_DIR"
echo "test file" > "$SOURCE_DIR/data.txt"

if [ -f "$SOURCE_DIR/data.txt" ]; then
  cp "$SOURCE_DIR/data.txt" "$BACKUP_DIR/data.txt"
  echo "Backup done"
else
  echo "Source missing"
fi

إذا نُسخ الملف بنجاح وظهرت رسالة Backup done، فقد أتقنت الأساس.

FAQ: أسئلة شائعة حول Bash File Operations

كيف أتحقق من وجود ملف في Bash؟

باستخدام شرط test مثل [ -f file ] للملف و[ -d dir ] للمجلد.

ما أفضل طريقة لقراءة ملف سطرًا بسطر في Bash؟

استخدم while IFS= read -r line; do ...; done < file للحفاظ على النص كما هو.

كيف أنسخ ملفات بشكل آمن داخل سكربت Bash؟

تحقق أولاً من وجود المصدر والوجهة، ثم استخدم cp أو rsync مع رسائل log واضحة وحالات خطأ مناسبة.

الخطوة التالية

في الدرس القادم سنتعلم أتمتة المهام باستخدام Bash بشكل عملي.

التالي: Bash Automation
المحرر الذكي

اكتب الكود وشاهد النتيجة فوراً

جرب الآن مجاناً
قناة ديف عربي

تابع أحدث الدروس والتحديثات مباشرة على واتساب

انضم الآن