إدارة الملفات في 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 واضحة وحالات خطأ مناسبة.