复制目录

Copying a directory

我对 bash 脚本编写完全陌生,但想尝试一下。我写了一个简单快速的目录备份脚本。

#!/bin/bash

echo "Enter your source"
read source

echo "Enter your target"
read target

backup(){
    cp -r $source $target
}

backup source target

exit 0

但是,一旦我 运行 它无法识别目录路径。它给出: cp: cannot stat '~/Desktop/week46': No such file or directory 即使目录存在并且当我手动 运行 cp -r ~/Desktop/week46 ~/Desktop/week47 它正在工作。

我做错了什么?

程序无法解析目录路径,因为读取函数将输入读取为单引号中的字符串(因此它不会 interpolate/expand 它的内容)。所以它的执行相当于 cp -r '~/Desktop/week46' '~/Desktop/week47'.

当您在 shell 中执行时,您传递的是不带引号的内容,因此 shell 可以轻松解析相对路径。

您可以尝试使用 readlink dirnamebasename.

探索一些解决方法

一个可能的解决方案可能是:

RES_PATH=$(readlink $(dirname $source))
FILE=$(basename $source)
SRC=${RES_PATH}/${FILE}