Shell脚本预测逻辑...使用gdrive将数据发送到谷歌驱动器

时间:2016-08-20 22:13:56

标签: shell

我已经制作了一个小的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脚本的问题吗?

2 个答案:

答案 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

相关问题