我已经制作了一个小的shell脚本来将一些备份数据发送到谷歌驱动器帐户...它工作正常,但我需要从谷歌驱动器中删除旧文件。我不熟悉shell脚本,我不知道如何完成下面的代码:
#!/bin/sh
# Backing up to local folder
sudo gitlab-rake gitlab:backup:create
# Sending files to google drive https://github.com/prasmussen/gdrive
gdrive sync upload /path/to/backups folderID
# Delete 5 days older backups from local folder
find /path/to/backups/* -mtime +5 -exec rm {} \;
# Get date fom 5 days ago
DATA=`date +%Y-%m-%dT%H:%M:00 -d "5 days ago"`
下面的一行列出了我需要删除的所有文件ID:
# List files to delete
gdrive list -q "'folderID' in parents and modifiedTime <= '$DATA-03:00'" --no-header | awk '{print $1;}'
现在我只需要运行
gdrive delete <fileID>
我之前列出的每个ID。
有人可以帮我解决这个foreach shell脚本的问题吗?
答案 0 :(得分:0)
将文件存储到变量中(主要是为了提高可读性):
files=$(gdrive list -q ...)
然后将IFS设置为空,这样它就会删除所有空格,但每条线上都有换行符:
IFS= read -r file; do
printf 'gdrive delete %s\n' "$file"
done <<EOF
"$files"
EOF
我正在使用printf
,因此您可以看到命令的外观。
这基本上取自Bash FAQ。
请注意,这会改变bash解释当前shell中字符串中字段的方式。
答案 1 :(得分:0)
感谢@mrmcgreg的帮助!
files=$(gdrive list -q ... | awk {'print $1'});
IFS="
"
for i in $files
do
gdrive delete $i
done <<EOF
"$files"
EOF
也许这不是最好的解决方案,但它有效:
backup.sh
Deleted '1471727727_gitlab_backup.tar'
Deleted '1471727472_gitlab_backup.tar'
Deleted '1471727308_gitlab_backup.tar'
Deleted '1471724530_gitlab_backup.tar'
Deleted '1471627308_gitlab_backup.tar'
:d