Argumentliste zu lang und wird in Samba Share kopiert

Argumentliste zu lang und wird in Samba Share kopiert

Ubuntu 12.04 LTS 64-Bit.

Ich versuche, eine geplante Aufgabenkopie aus einem Verzeichnis mit Tausenden von Dateien auf eine Samba-Freigabe zu erstellen (und dabei Duplikate zu überspringen). Ich habe meine Samba-Freigabe über die GUI zugeordnet.

Der Befehl, den ich ausprobiert habe:

cp /home/security/Brick/* ~/.gvfs/"cam on atm-bak-01.local/Brick" -n

Ich habe das hier gefunden, weiß aber nicht, wie ich die Syntax entsprechend meinen Anforderungen ändern kann.

finde -maxdepth 1 -name '*.prj' -exec mv -t ../prjshp {} +

Alle Hinweise sind herzlich willkommen.

Antwort1

Das Problem ist, dass die Shell Ihre Datei /home/security/Brick/*mit einer langen (zu langen) Liste von Dateien erweitertVorgebe es weiter an cp.

Wenn Sie das gesamte Verzeichnis kopieren möchten, Brickwäre folgendes vielleicht das einfachste:

cp -rn /home/security/Brick ~/.gvfs/"cam on atm-bak-01.local"/

Verwenden Sie dazu das Flag „rekursiv“ cp. Dadurch wird auch die gesamte Struktur unter Brick kopiert (einschließlich Unterverzeichnisse).

Eine Möglichkeit ist die Verwendung einer forSchleife:

for file in /home/security/Brick/*; 
do
cp -n $file ~/.gvfs/"cam on atm-bak-01.local/Brick"
done

Oder mit find:

find /home/security/Brick/ -type f -exec cp -n {} ~/.gvfs/"cam on atm-bak-01.local/Brick" \;

Dieser Befehl -type fbesagt, dass nur Dateien (keine Verzeichnisse) ausgewählt werden sollen. Anschließend wird für jede Datei der angegebene Befehl ausgeführt: {}wird durch den Dateinamen ersetzt und \;ist das Semikolon, das zum Schließen der -execKlausel benötigt wird und maskiert wird, da es sonst von der Shell interpretiert (und entfernt) wird.

Der folgende Befehl -execkann beliebig sein (beispielsweise cp -nkönnen Sie anstelle von verwenden , cp -avum im Archivmodus zu kopieren (einschließlich Zeitstempel und Angemessenheit) und zu überschreiben, oder Sie können andere Befehle verwenden (Aber: Sie sollten Shell-Escapes, Globbing und Anführungszeichen vorher verstehen, sonst können Sie großen Schaden anrichten --- siehe zum Beispiel"Die Shell lernen").

Find ist ein sehr mächtiger Befehl --- es lohnt sich, ihn gut zu lernen. Ich habe interessante Tutorials gefundenHier,HierUndHier.

Informationen zum Erstellen einer Datensicherung mit cp -n:

Beachten Sie, dass das -nFlag keine vorhandenen Dateien überschreibt. Wenn Sie also Änderungen an einer Datei in Ihrem lokalen Verzeichnis vornehmen, die zuvor kopiert wurde, wird diesnichterneut kopiert werden ... und Sie haben im Backup die alte Version davon.

Aus diesem Grund empfehle ich die Verwendung eines Backup- oder Synchronisierungsprogramms wieEinklangoderrsync, um diese Arbeit zu erledigen. Diese Dienstprogramme aktualisieren nur die geänderten Dateien, können Schreibvorgänge (und damit die Netzwerkbandbreite) minimieren und sind im Allgemeinen viel sicherer. Ihr Backup könnte durch rsynceinfaches Eingeben von Folgendem gelöst werden:

rsync -azvv  /home/security/Brick   ~/.gvfs/"cam on atm-bak-01.local/Brick"

(Achten Sie darauf, am Ende kein abschließendes „/“ hinzuzufügen – sonst erstellt rsync ein Unterverzeichnis Brick/Brick. Ja, rsyncist leistungsstark und manchmal ziemlich launisch.)

Unison verfügt über eine schöne grafische Benutzeroberfläche und teilt Ihnen auch mit, ob es in Ihrem Repository widersprüchliche Änderungen gibt – das wäre also meine bevorzugte Option.

verwandte Informationen