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

时间:2015-05-08 17:04:59

标签: shell scripting terminal

尝试编写一个简单的脚本来复制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命令直接起作用。我在这里做错了什么?

3 个答案:

答案 0 :(得分:8)

~是“当有疑问时引用”规则的少数例外之一。正如其他人所指出的那样,引用~不受扩展。但是,您仍然可以引用字符串的 rest

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

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

FILEN="test.txt"

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

答案 1 :(得分:6)

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

$ echo ~
/home/politank_z

$ echo "~"
~

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

答案 2 :(得分:2)

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

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

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