成功复制后,如何删除Bash中的文件夹?
-
21-09-2019 - |
题
我最近创建了我的第一个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.
不隶属于 StackOverflow