كيف يمكنني حذف المجلدات في باش بعد نسخة ناجحة (Mac OSX)؟

StackOverflow https://stackoverflow.com/questions/2495967

سؤال

لقد قمت مؤخرًا بإنشاء أول نص برمجي 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top