我是 bash 的新手,正在尝试理解我已经通过的脚本。在脚本中,我有以下变量:
site_source="${site_host[$i]}:public_html"
任何人都可以确认冒号在这里的意思吗?我需要将存储在这个变量中的路径更改为根路径,所以我认为删除该:public_html
部分可以实现这一点(但没有)。
我有多个网站由同一提供商托管。这意味着通过 SSH 访问对所有人来说都是同一个“主机”。
我已将以下版本添加到每个站点的 SSH 配置文件中:
Host shell.grid.co.uk
User testuser
IdentityFile ~/.ssh/id_rsa_testuser
现在我的配置中有 6 个站点,无法通过终端连接到 SSH。
我收到以下错误:
从 [IP ADDRESS] 端口 22:2 收到断开连接:[USER] 的身份验证失败太多
我一直在做一些研究,想知道这是否与有关MaxAuthTries
?
如果我从配置文件中删除一项或多项,我就可以在终端上通过 SSH 登录。
所有这些网站都在一个共享的托管平台上,如果这有什么不同的话。
以下是检查路径中存在时间超过 1 天且符合名称标准的任何文件夹。如果找到,该文件夹将移至“垃圾箱”文件夹。
find /Users/myname/Desktop/backups/websites/testwebsite.co.uk -maxdepth 1 -type d -mtime +1 -name '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' -exec mv {} /Users/myname/Desktop/backups/trash \;
我需要修改文件夹名称,以在末尾包含“_renamed”。
我以为我可以使用 mv 中的花括号,但现在意识到这也需要完整的文件夹路径。
find /Users/myname/Desktop/backups/websites/testwebsite.co.uk -maxdepth 1 -type d -mtime +1 -name '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' -exec mv {} /Users/myname/Desktop/backups/trash/{}_renamed \;
有什么方法可以在不复制路径的情况下修改文件夹路径?
我正在使用 bash 和 rsync 来创建和存储我的网站的备份。我将这些存储在“ dd-mm-yyyy
”的日期文件夹中。
如果这些文件夹超过 x 天(目前是 2 天,但会更长),我一直在尝试以下方法来删除这些文件夹。
find /path/to/files -type d -mtime +2 -name [0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9] -exec rm -rf {} \; -prune
上面的工作,但只是想仔细检查我在这里没有做明显错误的事情。
然后我想检查是否找到任何文件夹,如果它们被删除,哪些是。
我想知道这是否会像下面这样简单来检查是否为真:
if find /path/to/files -type d -mtime +2 -name [0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9] -exec rm -rf {} \; -prune; then
...
fi
但是我不确定如何输出被删除的文件夹路径。
是否可以检查 rsync 是否成功,如果不成功则可能收集错误?
当我使用 --link-dest 时,我认为这可能更难检测到。
我对 bash 还很陌生,所以任何指导都将不胜感激。
这是我的脚本的精简版:
#!/bin/bash
set -e
site_host=(
"[email protected]"
"[email protected]"
)
backup_dest=(
"/Users/computername/Desktop/rsync/test1.co.uk"
"/Users/computername/Desktop/rsync/test2.co.uk"
)
now=`date "+%d/%m/%Y %H:%M:%S"`
today=`date +"%d-%m-%Y"`
yesterday=`date -v -1d +"%d-%m-%Y"`
log="/Users/computername/Desktop/rsync/rsync.log"
site_count=${#site_host[@]}
for (( i = 0; i < site_count; i++ )); do
site_source="${site_host[$i]}:~/public_html"
site_dest="${backup_dest[$i]}/$today/"
rsync -zavx -e 'ssh -p22' \
--numeric-ids \
--delete -r \
--link-dest=../$yesterday $site_source $site_dest
echo "$now - File Backup Completed - ${backup_dest[$i]}/$today" >> $log
done
更新:
#!/bin/bash
set -e
site_host=(
"[email protected]"
"[email protected]"
)
backup_dest=(
"/Users/computername/Desktop/rsync/test1.co.uk"
"/Users/computername/Desktop/rsync/test2.co.uk"
)
now=`date "+%d/%m/%Y %H:%M:%S"`
today=`date +"%d-%m-%Y"`
yesterday=`date -v -1d +"%d-%m-%Y"`
log="/Users/computername/Desktop/rsync/rsync.log"
site_count=${#site_host[@]}
for (( i = 0; i < site_count; i++ )); do
site_source="${site_host[$i]}:~/public_html"
site_dest="${backup_dest[$i]}/$today/"
failures=0
if rsync -zavx -e 'ssh -p22' \
--numeric-ids \
--delete -r \
--link-dest=../$yesterday $site_source $site_dest;
then
echo "$now - File Backup Completed - ${backup_dest[$i]}/$today" >> $log
else
echo "$now - File Backup Failed - ${backup_dest[$i]}/$today" >> $log
failures=$((failures+1))
fi
if ((failures != 0)); then exit 1; fi
done
我正在尝试在我的脚本中添加一种删除早于 3 天前的备份的方法。
请参阅下面的精简简化版本,其中仅保留了删除部分。
据我了解,${BACKUP_DEST[$i]}/$OLDBACKUP
应该输出类似“/Users/christopherdavies/Desktop/rsync/test1.co.uk/07-06-18”的内容。
但是,每次运行时,它都会删除上面的“test1.co.uk”文件夹,无论它是否存在 3 天。
有人能指出我正确的方向吗?我一直没能取得任何进展……一双新鲜的眼睛?
#!/bin/sh
WEBSITE_HOST=(
"[email protected]"
"[email protected]"
)
BACKUP_DEST=(
"/Users/christopherdavies/Desktop/rsync/test1.co.uk"
"/Users/christopherdavies/Desktop/rsync/test2.co.uk"
)
OLDBACKUP=`date -d "3 days ago" +"%d%m%Y"`
SITE_COUNT=${#WEBSITE_HOST[@]}
for (( i = 0; i < SITE_COUNT; i++ )); do
# Remove old backups
if [ -d "${BACKUP_DEST[$i]}/$OLDBACKUP" ]; then rm -Rf ${BACKUP_DEST[$i]}/$OLDBACKUP; fi
done
exit 0
我有一组 SSH 密钥可以正常工作,但我现在需要多个密钥才能连接到其他服务器。
我已经为新服务器设置了一组新的密钥,为“lightand”的文件添加了一个标识符。关键是:
id_rsa_lightand
id_rsa_lightand.pub
我已将公钥添加到“authorized_keys”文件中,并将私钥放在我的本地机器上(在 .ssh 文件夹中)。
在本地机器上,我设置了一个“配置”文件并添加了以下内容:
Host [email protected]
IdentityFile ~/.ssh/id_rsa_lightand
然后我跑了:
eval `ssh-agent -s`
ssh-add ~/.ssh/id_rsa_lightand
但是,完成上述操作后,我仍然会通过终端收到密码提示。
有人对我哪里出错有任何想法吗?