我需要创建一个包含2个参数的shell脚本,每个参数都是一个有效的目录。该脚本在第一个参数指定的第一个目录中创建一个新目录,该目录与第二个参数同名,并在新创建的目录中复制第二个目录的内容(包括子目录和文件)。但它只复制扩展名为.txt的文件。
这是我到目前为止所得到的:
#!/bin/bash
if [ ! $# -eq 2 ]
then echo usage: file.sh directory1 directory2
exit 1
fi
if [ ! -d $1 ]
then echo $1 is not a directory \!
exit 1
fi
if [ ! -d $2 ]
then echo $2 is not a directory \!
exit 1
fi
答案 0 :(得分:1)
给学生留下调试:
die () { echo >&2 "$*"; echo "Usage...."; exit 1; } from="$1"; to="$2"; [ ."$from" = . ] && die "from dir name missing"; [ ."$to" = . ] && die "to dir name missing"; [ -d "$from" ] || die "from dir $from not a directory"; [ -d "$to" ] || die "to dir $to not a directory"; target="$to/$(basname "$from")"; #final target dir name, if I understand you correctly. find "$from" -name '*.txt' -maxdepth=1 | cpio -pd "$to" || # (cd "$from" && find * -name '*.txt' -maxdepth=1 | cpio -o...) | ( cd "$to" && cpio -i...) || die "cpio failed"
请注意cpio有很多选项,您应该在使用它之前查看它们。
注释掉的技术可让您更自由地移动到备用目标目录,我认为您不需要这些目录。
避免悲伤:始终引用文件名。
答案 1 :(得分:0)
只需在脚本上添加:
cp -dR $2 $1
答案 2 :(得分:0)
答案 3 :(得分:0)
根据您对文件属性保护的偏好,cp
,tar
或rsync
周围存在许多单行替代方案。可以使用find
命令获取过滤。