"~" von Dateiendung entfernen

cIrCa

Mitglied
Hallo zusammen

Ich habe folgendes Problem:
mit rsync --delete habe ich monatelang ein falsches Backup gemacht.

Nun haben alle Files am Schluss ein ~.
Zweites Problem: Einige Files haben einen Leerschlag im Dateinamen.

Versucht habe ich es auf folgende Art und Weise:
Code:
find  -name "*~">>foo.txt
for i in `cat foo.txt`; do mv "$i" "${i/~}"; done

Im 'foot.txt' steht nun:
Code:
[...]
./chat-net.ch/mix/.Cron Daemon/cur/1146636468.M957758P3358V0000000000000306I007AC092_60.phoenix.chat-net.ch,S=897:2,S~
./chat-net.ch/mix/.Cron Daemon/cur/1146723312.M214902P21859V0000000000000306I007AC09B_16.phoenix.chat-net.ch,S=897:2,S~
./chat-net.ch/mix/.Cron Daemon/cur/1146809922.M951768P9502V0000000000000306I007AC08F_14.phoenix.chat-net.ch,S=4209:2,S~
./chat-net.ch/mix/.Cron Daemon/cur/1146809922.M973180P9502V0000000000000306I007AC095_15.phoenix.chat-net.ch,S=897:2,S~
./chat-net.ch/mix/.Cron Daemon/cur/1147163578.M190044P18066V0000000000000306I007AC0A6_87.phoenix.chat-net.ch,S=4246:2,S~
./chat-net.ch/mix/.Cron Daemon/cur/1147163578.M203698P18066V0000000000000306I007AC0A8_89.phoenix.chat-net.ch,S=4245:2,S~
./chat-net.ch/mix/.Cron Daemon/cur/1147163578.M204017P18066V0000000000000306I007AC0AA_91.phoenix.chat-net.ch,S=897:2,S~
[...]

Beim Ausführen des Befehls
Code:
for i in `cat foo.txt`; do mv "$i" "${i/~}"; done
erhalte ich folgende Fehlermeldungen:

Code:
[...] mv: Aufruf von stat für ,,./chat-net.ch/mix/.Cron" nicht möglich: Datei oder Verzeichnis nicht gefunden
mv: Aufruf von stat für ,,Daemon/cur/1149072550.M67020P29605V0000000000000306I007AC11E_39.phoenix.chat-net.ch,S=897:2,S~" nicht möglich: Datei oder Verzeichnis nicht gefunden
mv: Aufruf von stat für ,,./chat-net.ch/mix/.Cron" nicht möglich: Datei oder Verzeichnis nicht gefunden
mv: Aufruf von stat für ,,Daemon/cur/1149142428.M414526P14364V0000000000000306I007AC124_30.phoenix.chat-net.ch,S=642:2,S~" nicht möglich: Datei oder Verzeichnis nicht gefunden
mv: Aufruf von stat für ,,./chat-net.ch/mix/.Cron" nicht möglich: Datei oder Verzeichnis nicht gefunden
mv: Aufruf von stat für ,,Daemon/cur/1149142428.M445836P14364V0000000000000306I007AC126_32.phoenix.chat-net.ch,S=897:2,S~" nicht möglich: Datei oder Verzeichnis nicht gefunden
[...]

Hat jemand eine Lösung für dieses etwas nervige Problem?
 
Hi,

hab grad keine Möglichkeit das zu testen, deswegen sag ich dir nur wie's gehen könnte.

Als erstes die for Schleife über alle Einträge. Die Strings drehst du um mit rev. Dann solltest du das letzte Zeichen mit cut wegschneiden können und dann wieder rev. Damit sollte das letzte Zeichen was ja scheinbar immer ~ ist weg sein. Danach kannst du sie wieder reinschreiben bzw. in eine neue Datei damit erzeugen.

Gruß 4men
 
Hi.

Das Problem sind die Leerzeichen in dem Dateinamen da Bash nach der Kommandoexpansion das Ergebnis an den Trennzeichen in Worte unterteilt.

Am besten machst du das so:
Bash:
cat foo.txt | while read filename; do 
  mv "$filename" "${filename/\~}";
done
Gruß
 
Zurück