Как удалить папки в Bash после успешной копии (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, потому что это вызовет вещи во многих местах.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top