0

我最近创建了我的第一个 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
4

1 回答 1

2

可能有很多方法可以做到这一点,但我会选择:

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

语法意味着只有在上一个命令成功退出的&&情况下才会这样做,并且rm -rf将强制删除目录,即使其中有文件也是如此。

您也可以尝试使用 rsync 选项 --remove-source-files,但我相信这会给您留下目录,因此您之后仍需要清理它们。

正如上面评论中提到的,你要避免像 ECHO 这样的大写命令,因为它会导致事情在很多地方中断。

有关退出状态的详细信息以及使用 bash 时的许多其他重要提示,我总是最终回到http://tldp.org/LDP/abs/html/exit-status.html

于 2010-03-22T22:36:27.033 回答