Omit Second Word in Filename


Ever had a bunch of files, where you wanted to omit the second word in the file name?

Now, I believe there’s a much smaller way using zmv and it’s regular expression powers (and if there is and you know, please feel free to add it in the comments).

I for my part grew up with the bash and therefore feel much more comfortable with using sed and awk, though I haven’t used it in a while. But somehow – at least to my memory – I never needed to use substr, so this one was new to me. Here’s how I’ve done it:

for f in *; do; t=$(awk '{print $1 " " substr($0, index($0,$3))}' <<< $f); mv "$f" "$t"; done

My initial idea, which I found much more appealing was to just override the second variable:

for f in *; do; t=$(awk '{$2=""; print}'; mv "$f" "$t"; done

But that still treats $2 as a word, and therefore, before and after it there’s a space, leaving me with two spaces. Using substr() however, the space is removed, which is why i had to manually insert it.

Now if you want a more readable script file read on.

#!/bin/bash

for file in *
do
  target = awk '{print $1 " " substr($0, index($0,$3))}'
  mv "$file" "$target"
done
Advertisements

5 thoughts on “Omit Second Word in Filename

  1. Werde ich wohl nie brauchen aber klingt gut 😉
    Du hast übrigens noch ein kleines “t” im target in der vorletzten Zeile des Gesamtscripts vergessen.

    • Das hab ich bis heute auch gedacht 😀
      Aber dann hatte ich doch tatsächlich einen Satz Dateien, wo ein Schlauberger hinter die laufende Nummer diese noch mal ausgeschrieben hat, sprich

      01 one xyz.xml
      02 two uvw.xml

      usw. Daher wurd auch das Escapen mit “” notwendig.

      Und ich kenne mich – sobald ich mal was *wieder* brauche, sind mindestens 1 Jahr vergangen und ich ärgere mich, dass ich mir nicht irgendwo notiert habe, wie es geht, weil ich dann wieder erst ne halbe Stunde recherchieren und herumprobieren muss… Lohnt sich zwar imho immernoch, als mal eben per Hand 100 Dateien zu editieren, aber trotzdem…. Muss ja nicht sein 😉

      PS: Danke für den Hinweis!

      • Hm, da hast du Recht!
        Hab mir auch irgendwann mal ein Skript verlegt, das alle TODO-Tags im code aufgelistet hat…
        Hab bis jetzt immer noch nicht die Muße dazu gehabt, es neu zu schreiben.

        • Für wenn Du die Sachen per Hand editierst? (Also per Editor?)
          Weil Eclipse kann das ja von sich aus, und ich denke, das weißt Du bestimmt. Welchen Editor nutzt Du denn?

          Für vim gibt es das nette Plugin TaskList, damit kann man die sich auch anzeigen lassen und automatisch zu den TODOs springen, und so.Hab’s aber bisher noch nicht so wirklich verwendet, weil meine vim-Projekte idR immer so klein sind, dass ich mir da garkeine TODOs reinsetzte… Und in vim selbst kann man ja auch super mit der Suche navigieren. Aber vielleicht wär das ja was für Dich 😉

          • Klar weiß ich, dass Eclipse die auflistet, benutze ich auch.
            Aaaaber: Ich habe eine Projekt-Plattform mit Kanban und junit-Test Auswertung undso gebaut (bzw. baue noch dran). Und diese soll die Todo-Tags früher oder später auch anzeigen können, was natürlich nur ohne Eclipse auf dem headless server geht 😉
            Also geht es mir eher um eine automatisierte externe Auflistung per cronjob.

Please comment. I really enjoy your thoughts!

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s