如何使用for循环进行复制?

如何使用for循环进行复制?

for d in ./*/ ; do (cd "$d" && cp -R ../lib . ); done 我在 shell 脚本中使用它 来复制父目录内所有子文件夹中的 lib 文件夹。但 lib 文件夹也被复制到 lib 内。如何避免这种情况?

答案1

没有extglob

for d in */ ; do
    if [ "$d" != "lib/" ]; then
        cp -R lib "$d"
    fi
done

或者事后删除它......(好吧,除非lib/lib事先存在!)

for d in */; do cp -R lib "$d"; done
rm -r lib/lib

(有点有趣的是,GNU cp 说cp: cannot copy a directory, 'lib', into itself, 'lib/lib',但还是这么做了。)

答案2

单程:

shopt -s extglob
for d in ./!(lib)/; do #...

或者将其移出,使其不匹配:

mv lib ../ #better not have a conflicting ../lib directory there
for d in */; do cp -R ../lib "$d"; done

答案3

使用 ls 命令的不包含选项:

for d in $(ls -I lib -1 */) ; do cp -R lib "$d" ; done

相关内容