Как удалить папки в bash после успешного копирования (Mac OSX)?

Недавно я создал свой первый 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

person cohortq    schedule 22.03.2010    source источник
comment
Несмотря на то, что OS X поддерживает команды в верхнем регистре, такие как ECHO, вы должны привыкнуть использовать строчные буквы, поскольку ни одна другая платформа на основе Unix, о которой я знаю, не поддерживает команды Bash в верхнем регистре.   -  person Dennis Williamson    schedule 23.03.2010


Ответы (1)


Вероятно, есть много способов сделать это, но я бы выбрал:

rsync -av $folderToBeMoved/"EyeTV Archive"/*.eyetv $newfoldername --exclude="Live TV Buffer.eyetv" && rm -rf $folderToBeMoved

Синтаксис && означает, что это нужно делать только в том случае, если предыдущая команда завершилась успешно, а rm -rf заставит удалить каталоги, даже если в них есть файлы.

Вы также можете попробовать опцию rsync --remove-source-files, но я полагаю, что это оставит вам каталоги, поэтому вам все равно придется потом их очищать.

И, как уже упоминалось в комментарии выше, вы хотите избегать команд UPPERCASE, таких как ECHO, потому что это приведет к поломке во многих местах.

Для получения подробной информации о статусе выхода, а также множества других полезных советов по работе с bash я всегда возвращаюсь к http://tldp.org/LDP/abs/html/exit-status.html.

person Jed Daniels    schedule 22.03.2010