schockschwerenot
Anmeldungsdatum: 17. Juni 2011
Beiträge: Zähle...
|
ACHTUNG, weil überhaupt nicht lustig. ich habe die variante von midhas verwendet, um alle vorliegenden ordner in einen neu erzeugten ordner zu verschieben, außen eben diesen neuen ordner selbst. Midhas schrieb:
find /my/path/ -not -iname "*html*" -exec mv {} /home/user/backup \; Verschiebt alles außer es beinhaltet html. Hoffe das hilft Dir weiter.
konkret also das hier ausgeführt: | find . -not -iname "projekte" -exec mv {} ./projekte/ \;
|
resultat: es ist zwar alles in diesem neuen ordner gelandet, jedoch ohne verzeichnisstruktur. d.h. alle dateien des gesamten baumes (also aller bäume) liegen nun direkt im neuen ordner. ich könnte mir nun in den haarigen allerwertesten beißen, dass ich nicht einfach eine schlichte for-schleife verwendet habe. ich hatte noch vor dem "entern" kurz gezögert, dachte dann aber, es hat ja beim themenstarter wunderbar geklappt mit seinen ordnern. zum glück habe ich das eine terabyte noch(!) auf einer anderen kiste rumliegen! was lief bei mir schief bzw. ursächlich anders als beim TE? es handelt sich um einen datenserver eines instituts mit folgender ausstattung: | bla@blub:/some/path$ uname -a
Linux htc031 4.4.0-109-generic #132-Ubuntu SMP Tue Jan 9 19:52:39 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
bla@blub:/some/path$ bash --version
GNU bash, Version 4.3.48(1)-release (x86_64-pc-linux-gnu)
|
grüße an die füße!
|
frostschutz
Anmeldungsdatum: 18. November 2010
Beiträge: 7651
|
es ist zwar alles in diesem neuen ordner gelandet, jedoch ohne verzeichnisstruktur
das ist ja noch harmlos mit mv kannst du dir problemlos auch schwere Datenverluste einfahren, wenn Dateien gleichen Namens sich gegenseitig überschreiben. Was bei deinem Befehl absolut drin ist.
was lief bei mir schief bzw. ursächlich anders als beim TE?
der zitierte Vorschlag wurde gar nicht verwendet
|
schockschwerenot
(Themenstarter)
Anmeldungsdatum: 17. Juni 2011
Beiträge: 23
|
frostschutz schrieb: es ist zwar alles in diesem neuen ordner gelandet, jedoch ohne verzeichnisstruktur
das ist ja noch harmlos mit mv kannst du dir problemlos auch schwere Datenverluste einfahren, wenn Dateien gleichen Namens sich gegenseitig überschreiben.
ist mir auch nicht in den sinn gekommen. da gibt (gab) es richtig viele dateien desselben namens ..
Was bei deinem Befehl absolut drin ist.
was lief bei mir schief bzw. ursächlich anders als beim TE?
der zitierte Vorschlag wurde gar nicht verwendet
naja, habe diese aussage so aufgefasst: Budada_Bubladend schrieb: Hoffe das hilft Dir weiter.
Ja tut es!
Habe mir schon so etwas ähnliches zusammengezimmert...
Danke dir! Gruß
BB
vor solchen tipps bzw. konsequenzen muss in foren gewarnt werden. ich will meine eigene blödheit nicht runterspielen, aber der schaden hätte richtig groß ausfallen könnten.
|
fleet_street
Top-Wikiautor
Anmeldungsdatum: 30. August 2016
Beiträge: 2129
Wohnort: Hunsrück
|
Dass eine Verzeichnisstruktur erhalten bleiben soll, war hier nicht Bestandteil der Aufgabenstellung. Mag ein wenig hochnäsig klingen, aber wenn du das Kommando nicht verstanden hast, dann ist es an dir, das erst in einer Testumgebung zu probieren. Das sollte Grundprinzip sein und nicht extra erklärt werden müssen. 😇 Vielleicht wäre rsync etwas für dich, ggf. mit den Optionen --exclude und --remove-source-files.
|
frostschutz
Anmeldungsdatum: 18. November 2010
Beiträge: 7651
|
Man hat selten so viele Sachen (bis auf eins) zu verschieben daß man das nicht von Hand machen kann oder einfach: mkdir NeuerOrdner
mv * NeuerOrdner
mv NeuerOrdner/DuNicht . oder mkdir Abstellgleis
mv AlterOrdner/DuNicht Abstellgleis/
mv AlterOrdner NeuerOrdner
mv Abstellgleis AlterOrdner Das ganze macht nur Sinn innerhalb eines Dateisystems, wo mv also wirklich nur umbenennt und nicht umkopiert. find -exec (oder gar delete) ist immer gefährlich und mv eigentlich auch. Überhaupt ist jedes Forum, Wiki etc. voll mit gefährlichen Befehlen, manchmal ists ja auch richtig so, und manchmal schreiben Leute eben auch einfach falsche Sachen. Ich versuche gefährliche Sachen manchmal zu entschärfen indem ich /dev/sdx schreibe statt dem richtigen Gerätenamen... die meisten Leute haben kein /dev/sdx, müssen den Befehl also anpassen und dabei wenigstens nochmal drüber nachdenken. Manchmal schreibt dann jemand eine "hilfreiche" Antwort drunter mit dem richtigen Gerätenamen, kann man halt nischt machen.
|
schockschwerenot
(Themenstarter)
Anmeldungsdatum: 17. Juni 2011
Beiträge: 23
|
fleet_street und frostschutz: ich kann euch in allem nur recht geben, und an alternativen für die lösung des problems mangelt es nun wahrlich nicht. nur mit einer aussage kann ich mich nicht so recht anfreunden:
Dass eine Verzeichnisstruktur erhalten bleiben soll, war hier nicht Bestandteil der Aufgabenstellung
es wurde zwar nicht explizit erwähnt, doch immerhin aus der formulierung des TE ersichtlich, dass er den inhalt eines verzeichnisses verschieben wollte, in welchem sich zumindest ein ordner befand, nämlich html. auch wenn gerade dieser ordner vom kopiervorgang ausgenommen werden sollte, muss man zum einen von weiteren ordnern im verzeichnis ausgehen und zum anderen dass die struktur erhalten bleiben soll, insbesondere da der TE explizit mv erwähnt, welcher die struktur tatsächlich beibehält.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12801
|
schockschwerenot schrieb:
Dass eine Verzeichnisstruktur erhalten bleiben soll, war hier nicht Bestandteil der Aufgabenstellung
es wurde zwar nicht explizit erwähnt, doch immerhin aus der formulierung des TE ersichtlich, dass er den inhalt eines verzeichnisses verschieben wollte, in welchem sich zumindest ein ordner befand, nämlich html.
Das bedeutet aber nicht, dass sich im Rest der Objekte (also die, die verschoben werden sollten) auch Ordner befinden.
auch wenn gerade dieser ordner vom kopiervorgang ausgenommen werden sollte, muss man zum einen von weiteren ordnern im verzeichnis ausgehen und zum anderen dass die struktur erhalten bleiben soll, insbesondere da der TE explizit mv erwähnt, welcher die struktur tatsächlich beibehält.
Deswegen ist ja find an dieser Stelle auch keine gute Lösung - zumindest nicht, wenn man nicht "-maxdepth 1" verwendet. Denn man muss ja nur aus einem Ordner verschieben. Das "ähnlich zusammen gezimmerte" wurde ja nicht gezeigt, so dass man gar nicht wissen kann, welche Lösung mit find oder vielleicht sogar ohne der OP des anderen Themas verwendet hat. Eine kleine Testsession: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 | $ rm -rf *
$ backup=$(mktemp -d)
$ mkdir html other
$ touch html/f{0..9} other/f{10..19} f{20..29}
$ find
.
./html
./html/f0
./html/f1
./html/f2
./html/f3
./html/f4
./html/f5
./html/f6
./html/f7
./html/f8
./html/f9
./other
./other/f10
./other/f11
./other/f12
./other/f13
./other/f14
./other/f15
./other/f16
./other/f17
./other/f18
./other/f19
./f20
./f21
./f22
./f23
./f24
./f25
./f26
./f27
./f28
./f29
$ find -mindepth 1 -maxdepth 1 \( -type d -name html -prune \) -o \( -exec echo mv -vt "$backup" {} + \)
mv -vt /tmp/tmp.G1n9TvEvha ./other ./f20 ./f21 ./f22 ./f23 ./f24 ./f25 ./f26 ./f27 ./f28 ./f29
$ find -mindepth 1 -maxdepth 1 \( -type d -name html -prune \) -o \( -exec mv -vt "$backup" {} + \)
renamed './other' -> '/tmp/tmp.G1n9TvEvha/other'
renamed './f20' -> '/tmp/tmp.G1n9TvEvha/f20'
renamed './f21' -> '/tmp/tmp.G1n9TvEvha/f21'
renamed './f22' -> '/tmp/tmp.G1n9TvEvha/f22'
renamed './f23' -> '/tmp/tmp.G1n9TvEvha/f23'
renamed './f24' -> '/tmp/tmp.G1n9TvEvha/f24'
renamed './f25' -> '/tmp/tmp.G1n9TvEvha/f25'
renamed './f26' -> '/tmp/tmp.G1n9TvEvha/f26'
renamed './f27' -> '/tmp/tmp.G1n9TvEvha/f27'
renamed './f28' -> '/tmp/tmp.G1n9TvEvha/f28'
renamed './f29' -> '/tmp/tmp.G1n9TvEvha/f29'
$ find
.
./html
./html/f0
./html/f1
./html/f2
./html/f3
./html/f4
./html/f5
./html/f6
./html/f7
./html/f8
./html/f9
|
|
schockschwerenot
(Themenstarter)
Anmeldungsdatum: 17. Juni 2011
Beiträge: 23
|
Das bedeutet aber nicht, dass sich im Rest der Objekte (also die, die verschoben werden sollten) auch Ordner befinden.
nicht zwangsläufig, aber mit "ausreichend" hoher wahrscheinlichkeit (sagen wir mal 50% a priori), wie ich finde, um kurz auf die gefahr hinzuweisen. ich meine, man erwartet doch von solchen foren eine problemlösung und keine neue, noch größere baustelle. es soll um gottes willen keine kritik am forum oder den engagierten helferlein sein, vielmehr eine anregung. hätte man mich persönlich mit diesem anliegen um hilfe ersucht, hätte ich beim find-ansatz unter garantie kurz auf diese gefahr hingewiesen. bin aber auch eher ne labertasche, das gebe ich gerne zu.
Deswegen ist ja find an dieser Stelle auch keine gute Lösung - zumindest nicht, wenn man nicht "-maxdepth 1" verwendet. Denn man muss ja nur aus einem Ordner verschieben.
danke für den tipp! ich finde auch, dass gerade ein solcher kurzer hinweis bei dem anderen thema fehlt - für diejenigen, die sonst in die selbe falle tappen würden wie ich. deswegen hatte ich meinen beitrag geschrieben und eben nicht, um euch auf die füße zu treten. nebenbei bemerkt hat mir dieses forum stets bei meinen (oft meiner eigenen blödheit geschuldeten) problemchen wacker zur seite gestanden.
Das "ähnlich zusammen gezimmerte" wurde ja nicht gezeigt, so dass man gar nicht wissen kann, welche Lösung mit find oder vielleicht sogar ohne der OP des anderen Themas verwendet hat. Eine kleine Testsession:
... die ich erst mal verdauen muss 😉 (und werde, weil optisch ansprechend)
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12801
|
schockschwerenot schrieb: Das bedeutet aber nicht, dass sich im Rest der Objekte (also die, die verschoben werden sollten) auch Ordner befinden.
nicht zwangsläufig, aber mit "ausreichend" hoher wahrscheinlichkeit (sagen wir mal 50% a priori), wie ich finde, um kurz auf die gefahr hinzuweisen. ich meine, man erwartet doch von solchen foren eine problemlösung und keine neue, noch größere baustelle. es soll um gottes willen keine kritik am forum oder den engagierten helferlein sein, vielmehr eine anregung. hätte man mich persönlich mit diesem anliegen um hilfe ersucht, hätte ich beim find-ansatz unter garantie kurz auf diese gefahr hingewiesen. bin aber auch eher ne labertasche, das gebe ich gerne zu.
Gut, jetzt sehe ich Deinen Punkt. Es ist mehr die Aufforderung, keine ungeprüften Lösungen zu posten und auf mögliche Gefahren hinzuweisen. Das wird man natürlich nie 100% hinbekommen. Aber natürlich hast Du damit Recht.
Deswegen ist ja find an dieser Stelle auch keine gute Lösung - zumindest nicht, wenn man nicht "-maxdepth 1" verwendet. Denn man muss ja nur aus einem Ordner verschieben.
danke für den tipp! ich finde auch, dass gerade ein solcher kurzer hinweis bei dem anderen thema fehlt - für diejenigen, die sonst in die selbe falle tappen würden wie ich. deswegen hatte ich meinen beitrag geschrieben und eben nicht, um euch auf die füße zu treten. nebenbei bemerkt hat mir dieses forum stets bei meinen (oft meiner eigenen blödheit geschuldeten) problemchen wacker zur seite gestanden.
Passt schon.
Eine kleine Testsession:
... die ich erst mal verdauen muss 😉 (und werde, weil optisch ansprechend)
Ich realisiere gerade, dass der "-prune" überflüssig ist, weil hier "-maxdepth 1" sowieso weiteres Absteigen verhindert. Für die Aufgabenstellung des anderen Themas würde ich vermutlich auch kein find nutzen, sondern eher eine Schleife. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74 | $ backup=$(mktemp -d)
$ mkdir html other
$ touch html/f{0..9} other/f{10..19} f{20..29}
$ find
.
./html
./html/f0
./html/f1
./html/f2
./html/f3
./html/f4
./html/f5
./html/f6
./html/f7
./html/f8
./html/f9
./other
./other/f10
./other/f11
./other/f12
./other/f13
./other/f14
./other/f15
./other/f16
./other/f17
./other/f18
./other/f19
./f20
./f21
./f22
./f23
./f24
./f25
./f26
./f27
./f28
./f29
$ for f in *; do test -d "$f" -a "$(basename "$f")" = html || echo mv -v -t "$backup" "$f"; done
mv -v -t /tmp/tmp.5KLesAidY7 f20
mv -v -t /tmp/tmp.5KLesAidY7 f21
mv -v -t /tmp/tmp.5KLesAidY7 f22
mv -v -t /tmp/tmp.5KLesAidY7 f23
mv -v -t /tmp/tmp.5KLesAidY7 f24
mv -v -t /tmp/tmp.5KLesAidY7 f25
mv -v -t /tmp/tmp.5KLesAidY7 f26
mv -v -t /tmp/tmp.5KLesAidY7 f27
mv -v -t /tmp/tmp.5KLesAidY7 f28
mv -v -t /tmp/tmp.5KLesAidY7 f29
mv -v -t /tmp/tmp.5KLesAidY7 other
$ for f in *; do test -d "$f" -a "$(basename "$f")" = html || mv -v -t "$backup" "$f"; done
renamed 'f20' -> '/tmp/tmp.5KLesAidY7/f20'
renamed 'f21' -> '/tmp/tmp.5KLesAidY7/f21'
renamed 'f22' -> '/tmp/tmp.5KLesAidY7/f22'
renamed 'f23' -> '/tmp/tmp.5KLesAidY7/f23'
renamed 'f24' -> '/tmp/tmp.5KLesAidY7/f24'
renamed 'f25' -> '/tmp/tmp.5KLesAidY7/f25'
renamed 'f26' -> '/tmp/tmp.5KLesAidY7/f26'
renamed 'f27' -> '/tmp/tmp.5KLesAidY7/f27'
renamed 'f28' -> '/tmp/tmp.5KLesAidY7/f28'
renamed 'f29' -> '/tmp/tmp.5KLesAidY7/f29'
renamed 'other' -> '/tmp/tmp.5KLesAidY7/other'
$ find
.
./html
./html/f0
./html/f1
./html/f2
./html/f3
./html/f4
./html/f5
./html/f6
./html/f7
./html/f8
./html/f9
|
oder so 1
2
3
4
5
6
7
8
9
10
11
12 | $ for f in *; do test -d "$f" -a "${f##*/}" = html || mv -vt "$backup" "$f"; done
renamed 'f20' -> '/tmp/tmp.5KLesAidY7/f20'
renamed 'f21' -> '/tmp/tmp.5KLesAidY7/f21'
renamed 'f22' -> '/tmp/tmp.5KLesAidY7/f22'
renamed 'f23' -> '/tmp/tmp.5KLesAidY7/f23'
renamed 'f24' -> '/tmp/tmp.5KLesAidY7/f24'
renamed 'f25' -> '/tmp/tmp.5KLesAidY7/f25'
renamed 'f26' -> '/tmp/tmp.5KLesAidY7/f26'
renamed 'f27' -> '/tmp/tmp.5KLesAidY7/f27'
renamed 'f28' -> '/tmp/tmp.5KLesAidY7/f28'
renamed 'f29' -> '/tmp/tmp.5KLesAidY7/f29'
renamed 'other' -> '/tmp/tmp.5KLesAidY7/other'
|
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17548
Wohnort: Berlin
|
Ordner mit Unterordnern würde ich mit dem Midnight-commander kopieren/verschieben. Der muss aber erst installiert werden. In einem Fenster den/die Quellordner markieren, im anderen den Zielort auswählen, Kommando wählen, fertig. Solange man für unterschiedliche Unterordner nicht unterschiedliche Filter hat schnell und so intuitiv, dass man selten Fehler macht.
|