我正在尝试更改 bash 脚本中的目录,以便在文件传输后删除文件。这是我的脚本以及我想做的事情:
请参阅第 5 行:
1 #!/bin/bash
2 name=$(date '+%y-%m-%d')
3 tar -zcf /var/tmp/backups/splunkbackup$(date '+%y-%m-%d').tar.gz /opt/splunk/etc/
4 rsync -avz /var/tmp/backups/splunkbackup* [email protected]:/var/log/splunk/backups/essearchhead
5 cd /var/tmp/backups/splunkbackup*
6 rm splunkbackup*
答案1
rsync
有一个内置方法可以完成您似乎想要手动执行的操作:
从man rsync
:
--删除源文件
这告诉
rsync
从发送端删除属于传输一部分且已在接收端成功复制的文件(即非目录)。
答案2
该模式/var/tmp/backups/splunkbackup*
可能会扩展到一个列表文件而不是您可以更改为的目录的名称。
我的猜测是第五行应该是
cd /var/tmp/backups
或者,第五行和六行将被单行取代
rm /var/tmp/backups/splunkbackup*
答案3
无需更改目录。
5rm /var/tmp/backups/splunkbackup*
6``
尽管递归力可能是有序的
5rm -rf /var/tmp/backups/splunkbackup*
6``
答案4
假设您一次只想处理一个存档文件,您可以将文件名保存到一个变量中:
file=/var/tmp/backups/splunkbackup$(date '+%y-%m-%d').tar.gz
tar -zcf "$file" /opt/splunk/etc/
rsync -avz "$file" [email protected]:/...
rm "$file"
尽管您可能只想在传输成功时删除文件,但可以这样做:
rsync -avz "$file" [email protected]:/... &&
rm "$file"