为什么 rsync 在 bash 中不工作?
why rsync not working in bash?
我有真正简单的 rsync bash 文件,如下所示:
#!bin/bash
rsync -avh --exclude={"/media/*","/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/lost+found/*"} / /my/backup/path
但问题是我什么时候做:
sh mybash.sh
它忘记了我有一些排除在外的事情要做,它备份了所有的东西。最有趣的是当我这样做的时候:
rsync -avh --exclude={"/media/*","/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/lost+found/*"} / /my/backup/path
在命令行中它考虑我的排除。
我需要将 bash 放入 crontab 但由于这个原因我不能。
如有任何帮助,我们将不胜感激。
我的 OS 是 Debian 喘不过气来的。
您正在使用 bash
以外的东西执行脚本,可能是 dash
,它无法识别大括号扩展。明确:
bash mybash.sh
但是,bash
中的大括号扩展主要是作为交互使用的快捷方式。如果您正在编写脚本,请明确(您的文本编辑器应该使其简单):
#!/bin/sh
rsync -avh \
--exclude "/media/*" \
--exclude "/dev/*" \
--exclude "/proc/*" \
--exclude "/sys/*" \
--exclude "/tmp/*" \
--exclude "/run/*" \
--exclude "/mnt/*" \
--exclude "/lost+found/*" \
/ /my/backup/path
现在您无需担心哪个 shell 执行脚本,只要它符合 POSIX 即可。
如果你真的想使用 bash
功能,我建议使用数组而不是大括号扩展。以后可读性更好,编辑也更容易。
#!/bin/bash
exclusions=(
--exclude "/media/*"
--exclude "/dev/*"
--exclude "/proc/*"
--exclude "/sys/*"
--exclude "/tmp/*"
--exclude "/run/*"
--exclude "/mnt/*"
--exclude "/lost+found/*"
)
rsync -avh "${exclusions[@]}" / /my/backup/path
我有真正简单的 rsync bash 文件,如下所示:
#!bin/bash
rsync -avh --exclude={"/media/*","/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/lost+found/*"} / /my/backup/path
但问题是我什么时候做:
sh mybash.sh
它忘记了我有一些排除在外的事情要做,它备份了所有的东西。最有趣的是当我这样做的时候:
rsync -avh --exclude={"/media/*","/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/lost+found/*"} / /my/backup/path
在命令行中它考虑我的排除。
我需要将 bash 放入 crontab 但由于这个原因我不能。
如有任何帮助,我们将不胜感激。
我的 OS 是 Debian 喘不过气来的。
您正在使用 bash
以外的东西执行脚本,可能是 dash
,它无法识别大括号扩展。明确:
bash mybash.sh
但是,bash
中的大括号扩展主要是作为交互使用的快捷方式。如果您正在编写脚本,请明确(您的文本编辑器应该使其简单):
#!/bin/sh
rsync -avh \
--exclude "/media/*" \
--exclude "/dev/*" \
--exclude "/proc/*" \
--exclude "/sys/*" \
--exclude "/tmp/*" \
--exclude "/run/*" \
--exclude "/mnt/*" \
--exclude "/lost+found/*" \
/ /my/backup/path
现在您无需担心哪个 shell 执行脚本,只要它符合 POSIX 即可。
如果你真的想使用 bash
功能,我建议使用数组而不是大括号扩展。以后可读性更好,编辑也更容易。
#!/bin/bash
exclusions=(
--exclude "/media/*"
--exclude "/dev/*"
--exclude "/proc/*"
--exclude "/sys/*"
--exclude "/tmp/*"
--exclude "/run/*"
--exclude "/mnt/*"
--exclude "/lost+found/*"
)
rsync -avh "${exclusions[@]}" / /my/backup/path