Как удалить папки в bash после успешного копирования (Mac OSX)? - PullRequest
0 голосов
/ 23 марта 2010

Я недавно создал свой первый скрипт 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

1 Ответ

2 голосов
/ 23 марта 2010

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

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.

...