接受两个目录路径作为参数,并表示一个表示扩展名的字符串

时间:2014-12-07 23:59:45

标签: shell

我似乎无法弄清楚这个问题。

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


示例输出:

$ 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 个答案:

答案 0 :(得分:1)

您首先要处理输入。您知道自己正在使用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)复制到与$2文件规范匹配的dir2(*.ext)。

当然,您可以根据需要将输入参数分配给变量。例如:

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

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

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