staging.inyokaproject.org

Skript für Dateien verschieben

Status: Ungelöst | Ubuntu-Version: Kubuntu 18.04 (Bionic Beaver)
Antworten |

moonwalker3

Anmeldungsdatum:
30. Juni 2008

Beiträge: 802

Ich habe ein Skript geschrieben, um Dateien in ein bestimmtes Verzeichnis zu verschieben. Sollte dort eine Datei mit dem Namen schon vorhanden sein, soll die Datei stattdessen woandershin verschoben werden. Wie kann ich das machen? Mit

1
mv -n "$i" ~/Verzeichnis

verhindere ich das Überschreiben. Wie kann ich angeben, dass es Plan B (ein anderes Verzeichnis) gibt?

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4735

Suchst Du eventuell so etwas?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
quelle=~/Quellverzeichnis
ziel_a=~/Verzeichnis
ziel_b=~/AnderesVerzeichnis

for name in "$quelle/"*; do
    if [ -f "$name" ]; then
        if [ -e "$ziel_a/$name" ]; then
            mv "$name" "$ziel_b"
        else
            mv "$name" "$ziel_a"
        fi
    fi
done

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Es gibt auch noch die Optionen -b und --backup, mit denen man das Überschreiben einer bestehenden Datei auf andere Weise verhindern kann.

moonwalker3

(Themenstarter)

Anmeldungsdatum:
30. Juni 2008

Beiträge: 802

Marc_BlackJack_Rintsch schrieb:

Suchst Du eventuell so etwas?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
quelle=~/Quellverzeichnis
ziel_a=~/Verzeichnis
ziel_b=~/AnderesVerzeichnis

for name in "$quelle/"*; do
    if [ -f "$name" ]; then
        if [ -e "$ziel_a/$name" ]; then
            mv "$name" "$ziel_b"
        else
            mv "$name" "$ziel_a"
        fi
    fi
done

Ja, sieht gut aus. Was macht der Parameter -f in Zeile 6?

apt-ghetto

Anmeldungsdatum:
3. Juni 2014

Beiträge: 2943

1
man [

moonwalker3

(Themenstarter)

Anmeldungsdatum:
30. Juni 2008

Beiträge: 802

apt-ghetto schrieb:

1
man [

FILE exists and is a regular file

Was bedeutet das? Wenn die Schleife durchlaufen wird, dann muss die Datei doch existieren. Wozu nochmal überprüfen?

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4735

@moonwalker3: Die ”Datei” könnte auch ein Verzeichnis sein, das prüfe ich hier ab. Es sei denn Du möchtest Verzeichnisse auch verschieben, dann kann der Test natürlich raus.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

moonwalker3 schrieb:

Was bedeutet das? Wenn die Schleife durchlaufen wird, dann muss die Datei doch existieren. Wozu nochmal überprüfen?

Weil Deine Annahme falsch ist:

1
2
3
4
5
$ ls 
$ for f in *; do echo "$f"; done
*
$ for f in *; do [ -f "$f" ] && echo "$f"; done
$ 

Und, es könnte ein Verzeichnis sein, wie Marc_BlackJack_Rintsch schrieb.

Antworten |