【发布时间】:2019-11-23 03:41:57
【问题描述】:
脚本执行一个简单的操作,将所有文件(不包括“.log”文件)和所有子目录复制到目标文件夹中。我遇到的问题是驻留在子目录中的文件也被复制到目标文件夹中,因此最终结果是这些文件显示了两次;在目标文件夹以及该文件夹的子文件夹中。如何避免这种情况?谢谢
source_dir="path/to/source"
dest_dir="path/to/destination"
arg=${1}
echo $arg
if [[ ! -d $dest_dir ]]; then
echo "creating destination directory $dest_dir"
mkdir $dest_dir
fi
#copy all files that don't end with .log
for resource in `find $source_dir ! -name '*.log'`; do
echo "copying resource $resource..."
cp -r $resource $dest_dir
done
【问题讨论】:
-
不是您的直接问题,但请阅读BashPitfalls #1 以了解为什么此代码不适用于带有空格的文件名,并阅读UsingFind 以了解该怎么做。此外,通过shellcheck.net 运行它并修复识别的引用错误。
-
...也就是说,您真正的问题是如何排除路径?如果是这样,请参阅
find中描述使用-prune操作的任何现有问答条目。但是,这里的示例路径不会发生这种情况,因为在问题的代码中,目标不在源代码之下。 -
或者你在问如何告诉
find不要递归?我们也已经有相关条目。