Mit prename
( rename
auf vielen Systemen alias ) ist dies ohne mehrere Läufe von mv
oder möglich cp
:
cd /home/user
find . -type f -name 'Loads.bdf' -exec \
prename -n 's:^./::; s:/:_:g; s:^:destination/:' {} +
Entfernen Sie das, -n
wenn Sie sicher sind, dass dadurch die gewünschten Dateien verschoben werden.
Aktualisieren
Um die Dateien zu kopieren, anstatt sie zu verschieben, kopieren Sie am schnellsten zuerst mit cpio
oder pax
und benennen sie dann wie zuvor um. ZB (mit GNU cpio
):
cd /home/user
find . -type f -name 'Loads.bdf | cpio -p --make-directories destination
cd destination
find . -type f -name 'Loads.bdf' -exec prename -n 's:^./::; s:/:_:g' {} +
Beachten Sie, dass pax
POSIX und LSB cpio
zwar nicht mehr POSIX sind, cpio
aber immer noch das Programm ist, das häufig auf vielen Systemen verwendet wird.
Um Dateinamen mit Zeilenumbrüchen mit GNU find
/ zu behandeln cpio
, ist es möglich, -print0
zu find
und -0
zu hinzuzufügen cpio
.
Update 2
Die pax
Lösung ist ein Einzeiler (ohne den cd
):
cd /home/user
find . -name 'Loads.bdf' | cut -d/ -f 2- | pax -rws ':/:_:g' destination
Oder für einen beliebigen Dateinamen (und GNU find
):
find /home/user -name 'Loads.bdf' -printf '%P\0' | pax -0rws ':/:_:g' destination