web-dev-qa-db-ja.com

forループを使用してコピーする方法は?

シェルスクリプトでこのfor d in ./*/ ; do (cd "$d" && cp -R ../lib . ); doneを使用して、親ディレクトリ内のすべてのサブフォルダーにあるlibフォルダーをコピーしています。ただし、libフォルダーもlib内にコピーされます。それを回避する方法は?

3
the_Strider

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'と言っていますが、とにかくそうします。)

3
ilkkachu

一方通行:

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
2
PSkocik

Lsコマンドのdoes-not-includeオプションの使用:

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