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
cp
eindeutig ist, können Sie es versuchen --target-directory
, z. B. cp --target-directory=2 fileglob1 fileglob2
finde 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 cp
erlauben -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 von1
wirdf
in diesem Beispiel nicht kopiert .