Ich habe versucht, eine Datei test.txt
mit einem Befehl in mehrere Verzeichnisse zu kopieren :
cp ~/test.txt ~/folder1 ~/folder2
Aber ich habe es nicht geschafft. Gibt es eine Möglichkeit, dies mit einem Befehl zu tun, damit ich eine Datei oder sogar einen Ordner in mehrere Verzeichnisse kopieren kann?
command-line
cp
nux
quelle
quelle
for dest in folder1 folder2; do cp ~/test.txt ~/"$dest"; done
cp ~/test.txt ~/folder1 && cp ~/test.txt ~/folder2
Antworten:
cp
kann aus mehreren Quellen, aber nicht an mehrere Ziele kopieren. Sieheman cp
für weitere Informationen.Der einzige Bash-Befehl, den ich kenne, der in mehrere Ziele kopieren / speichern kann, ist
tee
.Sie können es in Ihrem Fall wie folgt verwenden:
Beachten Sie, dass
tee
die Eingabe auch in die Standardausgabe (stdout) geschrieben wird. Wenn Sie dies nicht möchten, können Sie dies verhindern, indem Sie die Standardausgabe folgendermaßen umleiten/dev/null
:quelle
>/dev/null
Werke auch mit Binärdateien verwenden, ohne das Terminal zu-r
Optioncp
für Verzeichnisse zu verwendentee
Gegensatz zucp
Kopien wird nur der Inhalt der Datei ignoriert, wobei Modus, Eigentümer und Zeitstempel ignoriert werden. So vermeiden Sie, den Dateinamen zu wiederholen:f=text.txt; <~/$f tee ~/folder1/$f > ~/folder2/$f
Eine andere Möglichkeit, eine Kopie an mehrere Speicherorte zu erstellen, ist der folgende Befehl:
Wenn dir1 oder dir2 Unterverzeichnisse haben, in die die Datei nicht kopiert werden soll, fügen Sie die folgende
-maxdepth 0
Option hinzu:Beachten Sie, dass dies jede Datei in
dir1
unddir2
mitfile.txt
dem Inhalt überschreibt , zusätzlich zum Kopieren. Wenn Sie nur kopierenfile.txt
möchten, ohne andere Dateien in diesen Verzeichnissen zu beeinträchtigen, müssen Sie festlegenfind
, dass nur Verzeichnisse bearbeitet werden sollen:quelle
find
und zweimal (in diesem Fall)cp
. Um nicht zu sagen, dasfind
braucht viel Zeit.Der Befehl
versucht, zwei Dateien (
~/test.txt
und~/folder1
) zum Ziel zu kopierenfolder2
. (Und wenn~/folder2
es ein Verzeichnis gibt und es sich um ein Verzeichnis handelt, wird eine Warnung angezeigt, dass das Verzeichnis weggelassen wird.)Wenn Sie mehrere Kopien der Datei erstellen möchten
test.txt
, müssen Sie eine Schleife oder mehrere Befehle verwenden ...(... und seien Sie vorsichtig, wenn Sie Leerzeichen in den Dateinamen eingebettet haben, müssen Sie Anführungszeichen setzen).
Um ganze Verzeichnisse zu kopieren, müssen Sie die
-r
Option verwenden:Dies wird erstellt
~/folder1/folder3
und~/folder2/folder3
mit allen Dateien enthalten.quelle
Sie können ein Hilfeskript erstellen oder es mit
xargs
einer Druckfunktion ausführen (in diesem Fallecho
):Dadurch wird jedes Verzeichnis als Argument für die
cp
Funktion angegeben, wobei die Testdatei als Parameter verwendet wird.quelle
Nach langer Suche wirkt diese Arbeit auch wie ein Zauber!
Dadurch wird file.txt in jedes Verzeichnis an Ihrem aktuellen Standort im Terminal kopiert .
Dadurch wird ein Ordner in jedes Unterverzeichnis an Ihrem aktuellen Standort im Terminal kopiert.
Ich teile es, hoffe es hilft auch anderen.
quelle
zsh
können Siefor i in *(/); ...
alle Unterverzeichnisse[ -d ...
durchlaufen, um den Test zu vermeiden . Erweiterte Globbing ist einer der Gründe, warum ich es über magbash
.zsh
kann der erste Befehl dieser Antwort so vereinfacht werdenfor dir in *(/); do cp /path/file.txt "$dir"; done
. Siehe zsh.sourceforge.net/Intro/intro_2.htmlfor dir in */;
Wenn Sie die Datei test.txt in jedes Verzeichnis in / tmp / target / ... kopieren möchten
Erstellen Sie eine Testumgebung:
Kopiere es:
quelle
Ich dachte nur, um eine Variation der Antwort von zu geben
Sylvain Pineau
wo
dir1
unddir2
sind nicht in Ihrem aktuellen Verzeichnis.find ./ -maxdepth 2 -type d -name dir1 -exec cp file.txt {} \;
Hier sucht find
dir1
zwei Ebenen tief oder Sie können-maxdepth
Parameter weglassen, umdir1
in allen Ordnern im aktuellen Verzeichnis und darunter zu suchen .quelle