ubuntuusers.de

mv: Argumentliste ist zu lang

Status: Ungelöst | Ubuntu-Version: Ubuntu 12.10 (Quantal Quetzal)
Antworten |

gubach

Anmeldungsdatum:
13. August 2009

Beiträge: 21

Ich bekomme die Fehlermeldung

sh:/bin/mv: Die Argumentliste ist zu lang

Kann man vielleicht mv in 1000er Schritten unterteilen, ohne auf die Filenamen zu referieren? Andere Lösungsvorschläge sind natürlich auch willkommen.

Danke!

wxpte

Anmeldungsdatum:
20. Januar 2007

Beiträge: 1388

Die Verwendung von xargs ist für solche Fälle gedacht.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17605

Wohnort: Berlin

gubach schrieb:

Ich bekomme die Fehlermeldung

sh:/bin/mv: Die Argumentliste ist zu lang

Kann man vielleicht mv in 1000er Schritten unterteilen, ohne auf die Filenamen zu referieren? Andere Lösungsvorschläge sind natürlich auch willkommen.

Wie sieht denn das Kommando aus?

gubach

(Themenstarter)

Anmeldungsdatum:
13. August 2009

Beiträge: 21

Wie sieht denn das Kommando aus?

ganz einfaches mv Kommando, das viele Dateien (jpgs) aus einem Orner in einen anderen verschieben soll:

mv /home/..../Quelle/p3m1* /home/.../Ziel/

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17605

Wohnort: Berlin

Dann passt die Lösung die mir vorschwebte nicht.

Der xargs-Weg von WinXP to Edgy geht nicht? Dann würde ich es mit

1
find /home/..../Quelle -name "p3m1*" -exec mv -t /home/.../Ziel/ {} + 

machen.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13176

gubach schrieb:

Wie sieht denn das Kommando aus?

ganz einfaches mv Kommando, das viele Dateien (jpgs) aus einem Orner in einen anderen verschieben soll:

mv /home/..../Quelle/p3m1* /home/.../Ziel/

Wie gesagt: nutz xargs :

1
printf '%s\0' /home/..../Quelle/p3m1* | xargs -r0 mv -t /home/.../Ziel/

Falls das nicht geht, weil printf nicht mit so vielen Argumenten kann:

1
for f in /home/..../Quelle/p3m1*; do printf '%s\0' "$f"; done | xargs -r0 mv -t /home/.../Ziel/

Du kannst "-n 1000" als Option bei xargs verwenden, um selbst ein Limit festzulegen. Aber xargs berechnet das normalerweise abhängig vom System.

Ciao

robert

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7782

Wenn schon for, kann man sich das printf xargs auch sparen:

for f in dings*; do mv "$f" ziel/; done

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17605

Wohnort: Berlin

Ich vermute, dass wenn dem einen die Argumentliste zu lang ist, dass sie es dann auch dem anderen ist - aber das ist nur eine vage Vermutung.

Das einzige Mal dass ich in solche Probleme lief war es ein ganzes Verzeichnis, so dass ein

1
2
3
4
cmd * 
# scheiterte, aber 
cmd . 
# klappte.

Das wird aber hier nicht gehen.

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7782

Hm? for ist ja keine Argumentliste, das macht die Bash. Da gibts kein zu lang... und es ist schön einfach (auch wenn man dann natürlich mv tausendfach aufruft).

Und beim find muss man halt ein wenig aufpassend. find kann auch ein ganz anderes Ergebnis liefern, da es (ohne zusätzliche Optionen) auch in die Unterverzeichnisse geht.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13176

frostschutz schrieb:

Wenn schon for, kann man sich das printf xargs auch sparen:

for f in dings*; do mv "$f" ziel/; done

Ich finde das weniger elegant, weil man dann für jede Datei einen Prozess startet. Gerade bei vielen Dateien könnte das schon ins Gewicht fallen. Das ist bei meinen Vorschlägen nicht der Fall, da printf ein internes Kommando der Shell ist.

Ciao

robert

pascoli

Anmeldungsdatum:
5. Mai 2008

Beiträge: 124

Schon mal mit mmv versucht? Muss wahrscheinlich erst installiert werden.

Antworten |