接受作为参数两个目录路径和代表扩展名的字符串

问题描述:

我似乎无法弄清楚这个问题。接受作为参数两个目录路径和代表扩展名的字符串

创建一个脚本,该脚本接受两个目录路径和一个表示扩展名的字符串作为参数。它应该复制具有该特定扩展名的所有文件。


实例输出继电器:

$ cpByExtension d1 d0 txt 
Copying ".txt" files from directory d1 to directory d0 
0 files copied 
$ cpByExtension d2 d0 txt 
Copying ".txt" files from directory d2 to directory d0 
5 files copied 
$ 
+1

欢迎使用堆栈溢出。请尽快阅读[关于]页面。你有什么尝试?你尝试解决方案的大纲是什么样的?你在哪里遇到问题? – 2014-12-08 00:03:45

+1

请参阅http://stackoverflow.com/help/how-to-ask – tenfour 2014-12-08 00:04:06

首先你要处理的输入。你知道你正在服用two pathsan extension,所以你的论点是$1$2$3为:

#!/bin/sh 

## validate input 
if [ -z "$1" -o -z "$2" -o -z "$3" ]; then 
    printf "error: insufficient input. Usage: %s <dir1> <dir2> <ext>\n\n" "$0" 
fi 

一旦你知道你有你的输入,那么你可能会考虑测试每个目录,以确保它们的存在:

## validate dirs 
if [ ! -d "$1" -o ! -d "$2" ]; then 
    printf "error: invalid directory. Usage: %s <dir1> <dir2> <ext>\n\n" "$0" 
fi 

知道的目录存在(或者你可以测试第一,创建第二个),你现在可以复制匹配的文件:

cp "$1"/*."$3" "$2" 

将从dir1($1)的所有文件复制到匹配*.ext filespec的dir2($2)。

如果您愿意,您当然可以将输入参数分配给变量。例如:

dir1="$1" 
dir2="$2" 
ext="$3" 

这更具可读性,可以使逻辑更容易理解。您的文件副本将成为:

cp "$dir1"/*."$ext" "$dir2" 
+0

谢谢,它帮助了很多,我对扩展有问题。表示赞许,满意,胜利! – EnTK 2014-12-08 01:30:06