shell 将文件从一个目录复制到另一个目录的脚本

shell script to copy files from one directory to another

正在尝试编写一个简单的脚本来复制 OS X 10.9 中的一些文件。 内容如下..

SRC_DIR="~/Library/Preferences-Old"

DST_DIR="~/Library/Preferences"

FILEN="test.txt"

cp $SRC_DIR/$FILEN $DST_DIR

给我输出:

cp: ~/Library/Preferences-Old/test.txt: No such file or directory

当然,以上是错误的。终端中完全相同的 cp 命令可以直接解决问题。我在这里做错了什么?

您的双引号阻止 shell 将您的 ~ 转换为实际路径。观察:

$ echo ~
/home/politank_z

$ echo "~"
~

~ 不是实际位置,它是 shorthand 主目录的路径。

如前所述,双引号已禁用 ~ 扩展。

更好的方法是使用 HOME 变量:

SRC_DIR="$HOME/Library/Preferences-Old"
DST_DIR="$HOME/Library/Preferences"

~ 是规则 "When in doubt, quote" 的少数例外之一。正如其他人指出的那样,引用的 ~ 不受扩展限制。但是,您仍然可以引用字符串的 rest

SRC_DIR=~"/Library/Preferences-Old"
DST_DIR=~"/Library/Preferences"

请注意,根据分配给两个 *_DIR 变量的值,仅引用所分配的值是不够的;你仍然需要引用他们的扩展。

FILEN="test.txt"

cp "$SRC_DIR/$FILEN" "$DST_DIR"