Command-Line

如何使用for循環複製?

  • August 11, 2016

for d in ./*/ ; do (cd "$d" && cp -R ../lib . ); done 在 shell 腳本中使用它來複製父目錄內所有子文件夾中的 lib 文件夾。但是 lib 文件夾也被複製到 lib 中。如何避免這種情況?

沒有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',但還是這樣做了。)

單程:

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

引用自:https://unix.stackexchange.com/questions/302758