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