WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Linux, UNIX, Open Source (http://www.wcm.at/forum/forumdisplay.php?f=13)
-   -   blanks am ende des Filenamens entfernen (http://www.wcm.at/forum/showthread.php?t=240356)

CM²S 08.10.2010 14:31

blanks am ende des Filenamens entfernen
 
Hello,

ich hab grad ein dämliches problem gehabt,
jemand hat files mit blank an ende auf einen Ftp geladen.

ls -1 text* zeigt mir files an

test.txt
test2.txt

schön, aber

ls -1 text und tabulator gedrückt

zeigt mir

text.txt\ ein blank im filenamen

ich hab 2 lösungen

for i in `ls -1 text*`; do mv "$i " `echo "$i" |sed 's/*[ ]//g'`; done

oder

ls -1 *.txt\ | while read -r FILE
do
mv -v $FILE\ `echo $FILE | tr -d '\ '`
done

Wie hättet ihr es gemacht ???
Verbesserungen willkommen

ciao
CM²S

CM²S 08.10.2010 17:48

leider können einige ftp cliensts damit nicht umgehen ... ;-(

FranzK 08.10.2010 19:56

Schaut sehr nach einer komplizierten Fremdsprache aus! ;)

In einer Windows-Shell würde ich eine Schleife über alle Dateinamen laufen lassen und jeden Dateinamen durch Trim$(Dateiname) ersetzen versuchen (zumindest sinngemäß).

:hallo:

colossus 09.10.2010 10:42

Alles grauslich bis falsch, weil man den Output von `ls` in Shellscripts nicht parsed.

Am ehesten wohl noch so:
Code:

for f in ./*;
do
  mv -i "$f" "$(printf "%s" "${f}" \
  | sed -r 's/[[:blank:]]+$//')";
done

Wuerde ich aber auch nicht empfehlen; bei unerwarteten Sonderzeichen kann einfach immer noch zu viel schiefgehen.


Ich hab vor einiger Zeit mal ein Python-Script zusammengeschmissen, um solche (und aehnliche) Problemfaelle schnell loesen zu koennen, das Ergebnis ist sanitize.py.

Demo-Run:
Code:

colo@zealot:/tmp/spacedemo$ touch file "file " "file  " "file          " "someotherfile      "
colo@zealot:/tmp/spacedemo$ echo * | xxd
0000000: 6669 6c65 2066 696c 6520 2066 696c 6520  file file  file
0000010: 2020 6669 6c65 2020 2020 2020 2020 2020    file         
0000020: 2020 736f 6d65 6f74 6865 7266 696c 6520    someotherfile
0000030: 2020 2020 2020 0a                              .
colo@zealot:/tmp/spacedemo$ sanitize -v --subst="" ./*
./file  -> ./file.1
./file  -> ./file.1.1
./file            -> ./file.1.1.1
./someotherfile        -> ./someotherfile
4 of 5 files renamed.
colo@zealot:/tmp/spacedemo$ echo * | xxd
0000000: 6669 6c65 2066 696c 652e 3120 6669 6c65  file file.1 file
0000010: 2e31 2e31 2066 696c 652e 312e 312e 3120  .1.1 file.1.1.1
0000020: 736f 6d65 6f74 6865 7266 696c 650a      someotherfile.

Kuemmert sich auch um etwaige Kollisionen, die durch den Wegfall unerwuenschter Zeichen entstehen. Achtung, das Ding verwurstet auch einige fuer die Shell und fuer diverse Encodings problematische Sonderzeichen und macht automatisch alles Lowercase, das muesstest du, falls unerwuenscht, einfach im Source auskommentieren.


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag