كيف يمكنني حذف المجلدات في باش بعد نسخة ناجحة (Mac OSX)؟
-
21-09-2019 - |
سؤال
لقد قمت مؤخرًا بإنشاء أول نص برمجي Bash ، وأواجه مشاكل في إتقانه. أحاول نسخ مجلدات معينة من محرك محلي واحد ، إلى محرك أقراص الشبكة.
أواجه مشكلة حذف المجلدات بمجرد نسخها ، وأحيانًا يكون المجلد فارغًا من المحتويات ، لكن المجلد نفسه سيبقى ، وأحيانًا أخرى لن يحدث شيء على الإطلاق. هل هناك طريقة أفضل لمحاولة حذف المجلدات بعد أن يتم نسخ RSYNC؟ كنت أحاول استبعاد مجلد التليفزيون المباشر ، لكن في الحقيقة ، يمكنني تفجيره دون أي نتيجة إذا لزم الأمر.
#!/bin/bash
network="CBS"
useracct="tvcapture"
thedate=$(date "+%m%d%Y")
folderToBeMoved="/users/$useracct/Documents"
newfoldername="/Volumes/Media/TV/$network/$thedate"
ECHO "Network is $network"
ECHO "date is $thedate"
ECHO "source is $folderToBeMoved"
ECHO "dest is $newfoldername"
mkdir $newfoldername
rsync -av $folderToBeMoved/"EyeTV Archive"/*.eyetv $newfoldername --exclude="Live TV Buffer.eyetv"
# this fails when there is more than one *.eyetv folder
if [ -d $newfoldername/*.eyetv ];
then
#this deletes the contents of the directories
find $folderToBeMoved/"EyeTV Archive"/*.eyetv \( ! -path $folderToBeMoved/"EyeTV Archive"/"Live TV Buffer.eyetv" \) -delete
#remove empty directory
find $folderToBeMoved/"EyeTV Archive"/*.eyetv -type d -exec rmdir {} \;
fi
المحلول
ربما هناك الكثير من الطرق للقيام بذلك ، لكنني سأذهب مع:
rsync -av $folderToBeMoved/"EyeTV Archive"/*.eyetv $newfoldername --exclude="Live TV Buffer.eyetv" && rm -rf $folderToBeMoved
ال &&
بناء الجملة يعني فقط القيام بذلك هو أن الأمر السابق خرج بنجاح ، و rm -rf
سيجبر على إزالة الدلائل ، حتى لو كانت هناك ملفات فيها.
يمكنك أيضًا تجربة خيار RSYNC-تملأ ملفات المصدر ، لكنني أعتقد أن هذا سيتركك مع الدلائل ، لذلك ستظل بحاجة إلى تنظيفها بعد ذلك.
وكما هو مذكور في التعليق أعلاه ، فأنت تريد تجنب الأوامر الكبيرة مثل Echo ، مما يجعلها تتسبب في كسر الأشياء في الكثير من الأماكن.
للحصول على تفاصيل عن حالة الخروج وكذلك الكثير من النصائح الرائعة الأخرى عند العمل مع باش ، انتهى بي الأمر دائمًا بالعودة إلى http://tldp.org/ldp/abs/html/exit-status.html.