在bash脚本中复制文件

时间:2014-07-25 18:55:16

标签: bash

我有一个bash脚本,它查看文件夹并将文件从一个文件夹复制到另一个文件夹。 脚本足够大,但这里只有两行:

echo cp $working_directory/$folder_name/$f $new_filename
# cp $working_directory/$folder_name/$f $new_filename

这是echo命令的输出:

cp ~/MEGAsync/development/experiments/bash_renamer/tres/a.pdf ~/MEGAsync/development/experiments/bash_renamer/tres_1.pdf
cp ~/MEGAsync/development/experiments/bash_renamer/tres/b.pdf ~/MEGAsync/development/experiments/bash_renamer/tres_2.pdf

我可以启动任何此命令,它在终端中正常工作 但是,如果我取消注释真正的复制命令并启动脚本,我将收到错误:

cp ~/MEGAsync/development/experiments/bash_renamer/tres/a.pdf ~/MEGAsync/development/experiments/bash_renamer/tres_1.pdf
cp: ~/MEGAsync/development/experiments/bash_renamer/tres/a.pdf: No such file or directory
cp ~/MEGAsync/development/experiments/bash_renamer/tres/b.pdf ~/MEGAsync/development/experiments/bash_renamer/tres_2.pdf
cp: ~/MEGAsync/development/experiments/bash_renamer/tres/b.pdf: No such file or directory

为什么我有这个错误,我该如何解决?

3 个答案:

答案 0 :(得分:3)

我认为问题出在~标志上。如果echo按原样打印,则表示它在工作目录中查找名为~的目录。您可以将~替换为$HOME,或尝试以不同的方式执行命令。

答案 1 :(得分:2)

这不起作用,因为很可能在您的$working_directory变量定义中,您引用了波浪号~,因此bash中的波浪扩展无法正常工作。

  

Tilde Expansion

     

如果一个单词以不带引号的代字号字符('〜')开头,则所有   字符直到第一个未加引号的斜杠(或所有字符,如果有的话)   是没有不带引号的斜杠)被认为是波浪号前缀。如果没有   引用了波浪号前缀中的字符,中的字符   波浪号后面的波浪号前缀被视为可能的登录名。

~ 
The value of $HOME

~/foo 
$HOME/foo

答案 2 :(得分:0)

看起来作为变量一部分的波浪号~未被展开。 也许先试试这个?:

eval working_directory=$working_directory