复制目录
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
dirname
和 basename
.
探索一些解决方法
一个可能的解决方案可能是:
RES_PATH=$(readlink $(dirname $source))
FILE=$(basename $source)
SRC=${RES_PATH}/${FILE}
我对 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
dirname
和 basename
.
一个可能的解决方案可能是:
RES_PATH=$(readlink $(dirname $source))
FILE=$(basename $source)
SRC=${RES_PATH}/${FILE}