その理由は 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/
「..」を省略しないと、非ドットファイルを含め、親ディレクトリからすべてをコピーします。