Ich möchte jede Datei nur dann aus einer Verzeichnisstruktur in ein bestimmtes Verzeichnis kopieren, wenn dort noch keine Datei vorhanden ist.
Ich habe den ersten Teil dieser Frage zum Stapelüberlauf erhalten :
find . -type f -exec cp {} /target-directory \;
Wie kann ich überprüfen, ob die Datei vorhanden ist oder nicht? Wenn nicht, kopieren Sie die Datei, andernfalls überspringen Sie.
command-line
bash
files
find
Herr au
quelle
quelle
Antworten:
Sie können den Befehl
-u
switch from verwendencp
:oder verwenden Sie den
rsync
Befehl mit--ignore-existing
:Beispiel:
quelle
Ihr ursprünglicher Befehl kann wie folgt umgeschrieben werden:
Der Schlüssel hier ist, dass wir die Shell mit bestimmten Befehlen aufrufen und die gefundene Datei als
$1
Argument übergeben. Wenn diestest -e /target-directory/"$1"
fehlschlägt, bedeutet dies, dass keine Datei vorhanden ist. In diesem Fallcp
wird die Datei kopiert.Im Allgemeinen kann man andere Befehle verwenden, solange der Befehl das Vorhandensein einer Datei überprüfen kann. Einige der anderen Alternativen:
/usr/bin/realpath -e /target-directory/"$1" > /dev/null || cp "$1" /target-directory
stat >/dev/null /target-directory/"$1" || cp "$1" /target-directory/"$1"
quelle
stat
in Bash auf Dateiexistenz testen? Wäre nichttest -e
viel einfacher?Lesen Sie
man cp
und verwenden Sie die--no-clobber
Option, umcp
.quelle