So kopieren Sie alle Dateien von einem Verzeichnis in ein anderes in einem Bash-Skript [geschlossen]

9

Ich möchte alle Dateien aus einem Unterverzeichnis in ein anderes Verzeichnis kopieren, ohne den ursprünglichen Ordner zu kopieren. In einem Terminal würde ich das einfach machen:

%Vor%

und dann wird dir2 alle Dateien von dir1 enthalten, ohne dir1 selbst zu enthalten. Ich versuche, dies in einem Bash-Skript zu replizieren, und ich bekomme einen Fehler. Hier ist mein Bash-Code:

%Vor%

Ich bekomme diesen Fehler:

%Vor%

Das ist seltsam, weil ich überprüfen kann, ob das betreffende Verzeichnis existiert. Ich glaube, Bash beschwert sich über das '*', aber ich bin mir nicht sicher warum. Kann mir jemand aufklären, was ich falsch mache?

    
user3361761 16.05.2014, 06:00
quelle

2 Antworten

10

Erweitern Sie den Kommentar von devnull:

  • Zitate von jeder Art um einen Platzhalter wie * verhindern, dass die Shell den Platzhalter erweitert. Daher sollten Sie "/*" nur schreiben, wenn Sie einen Schrägstrich gefolgt von einem Literalstern wünschen.

  • Eine nicht-quoted Variable unterliegt der Worttrennung. Wenn also pck_dir den Wert my dir hat, wird $pck_dir"/*" auf zwei Wörter my und dir/* erweitert und beide Wörter werden als separate Argumente an cp übergeben. Sofern Sie keine Worttrennung wünschen, sollten Shell-Variablen immer in doppelten Anführungszeichen stehen.

Um zu erhalten, was Sie wollen, verwenden Sie:

%Vor%     
John1024 16.05.2014, 06:13
quelle
2

Verwenden Sie stattdessen die rsync-Befehlszeile.

rsync -auv dir1 / dir2 /

synchronisiert rekursiv alle Dateien aus dem Ordner dir1 in den Ordner dir2.

man rsync

um mehr Erklärungen zu erhalten, wie man diese Kommandozeile benutzt.

    
jmo 16.05.2014 06:13
quelle

Tags und Links