根据用户输入将文件复制到目录,并使用*列出文件

时间:2009-02-06 17:50:31

标签: bash shell

我想创建一个非常简单的bash脚本my_copy.sh,它读取任意数量的输入文件,目标目录,最后要求确认是否要复制文件。

使用示例:./my_copy.sh

 Type in the file names to copy:
 file1 file2 Anna Kurt Arne
 Type in the directory to copy to:
 dir_3
 Are you sure you want to copy the files:
 Anna
 Kurt
 Arne
 to the directory dir_3 (y/n)?

如果目标目录不存在,则应由脚本创建。


我的下一个问题:

我希望*字符执行简单的ls命令。因此,如果我键入./my_copy *,则在命令行中应列出我目录中的所有文件。

4 个答案:

答案 0 :(得分:4)

除非在调用脚本时对*进行转义或引用,否则shell会在脚本获取之前展开它。

  

./ my_copy'*'

  

./ my_copy \ *

看起来你正试图在'cp'周围添加一个简单的确认包装。或者您是否试图以交互方式提示用户?

答案 1 :(得分:4)

你可以使用“cp -i”,这使它在覆盖之前具有交互性和提示性。您还可以将其添加为.bash_profile的别名,因此它始终会提示。

答案 2 :(得分:1)

你的第二个问题非常困难。 shell将尝试解释*并将其替换为当前目录中的所有项目。 shell为您提供*作为参数列表中唯一条目的唯一方法是,目录中的所有文件都是以点开头的名称。因此,您的示例命令实际上将使用$ 0 = my_copy和$ 1 = my_copy。

进行调用

答案 3 :(得分:0)

您不能将*作为参数,但您可以将其替换为字母“e”,并执行此操作:

if [ "$1" = "e" ]
then
    ls
else
    return 0
fi