その理由は bash
にあるからです 、 *
ドット (.
) で始まるファイルは含まれません ).
実行できます
cp A/.* B
.
をコピーしなかったことを警告します または ..
、または任意のサブディレクトリですが、これで問題ありません。
または、ドット ファイルと通常のファイルを一緒にコピーする場合は、
cp A/.* A/* B
実行することもできます
shopt -s dotglob
cp A/* B
bash
で動作します 、しかし sh
ではありません .
また、サブディレクトリもコピーされても構わない場合は、これが最も簡単です:
cp -R A/ B
ヒント:ワイルドカードが期待どおりに機能しない場合は、echo で実行してみてください。たとえば、
$ echo A/*
A/file1 A/file2
$ echo A/.*
A/. A/.. A/.hidden1 A/.hidden2
$ echo A/.* A/*
A/. A/.. A/.hidden1 A/.hidden2 A/file1 A/file2
$ shopt -s dotglob
$ echo A/*
A/file1 A/file2 A/.hidden1 A/.hidden2
bash の場合、dotglob
を設定できます コピーする前に
shopt -s dotglob
cp A/* /destination
またはプログラミング言語
$ ruby -rfileutils -e 'Dir[".*"].each {|x| FileUtils.copy(x,"/destination") if File.file?x}'
dotglob を設定したくない場合は、
cp A/.* /destination 2>/dev/null
あなたが探しているのは、次のようなものです:
cp A/.??* B/
これはすべてのドットファイルに一致しますが、「.」には一致しません。また ".."。再帰的に作業していない限り、上記のソリューションのほとんどは問題ありません。しかし、次のようなことをしたいとすぐに:
cp -R A/.??* B/
「..」を省略しないと、非ドットファイルを含め、親ディレクトリからすべてをコピーします。