Könnte jemand erklären, warum dies passiert?
Ganz konkret: Warum wird der Inhalt einer 1 nach f kopiert? Und warum wird f nach g kopiert?
$ tree
.
0 directories, 0 files
$ mkdir 1
$ mkdir 2
$ touch 1/a
$ touch 1/b
$ mkdir 1/c
$ touch 1/c/x
$ tree
.
├── 1
│ ├── a
│ ├── b
│ └── c
│ └── x
└── 2
3 directories, 3 files
$ cp -r 1/* 2/*
zsh: no matches found: 2/*
$ cp -r 1/* 2/*
$ mkdir 2/f
$ mkdir 2/g
$ cp -r 1/* 2/*
$ tree
.
├── 1
│ ├── a
│ ├── b
│ └── c
│ └── x
└── 2
├── f
└── g
├── a
├── b
├── c
│ └── x
└── f
7 directories, 6 files
cpeindeutig ist, können Sie es versuchen --target-directory, z. B. cp --target-directory=2 fileglob1 fileglob2finde ich diese Option sehr nützlich in Skripten, in denen ich nicht sicher bin, welche Globs funktionieren und welche nicht. Es hilft, versehentliches Überschreiben zu verhindern. (Einige Versionen cperlauben -t.)
cp -r 1/* 2/*drin - es wird zweimal hintereinander mit (anscheinend) unterschiedlichen Ergebnissen durchgeführt. Es sollte sich immer darüber beschweren, dass es keinen findet,2/*weil die Shell diesen Glob nicht erweitern kann - nichts passt dazu. Und der Inhalt von1wirdfin diesem Beispiel nicht kopiert .