Frage

Ich habe eine Menge von Dateien, die ich umbenennen bin versucht, habe ich versucht, einen regulären Ausdruck zu machen, um sie anzupassen, aber auch, dass ich auf den Dateien stecken geblieben sind benannt wie:

  

Dateiname 01

     

Dateiname 100

     

Dateiname 02

     

Dateiname 03

etc, würde Ich mag eine „0“ (Null) an, hinter jeder Datei, die weniger als 100, wie folgt aus:

  

Dateiname 001

     

Dateiname 100

     

Dateiname 002

     

Dateiname 003

Der nächste bekam ich so viel wie passend sie wurde mit dieser -artigen d finden | sort -r | grep ‚[1-9] [0-9] $‘ aber ich kann nicht herausfinden, wie sie zu ersetzen. Vielen Dank im Voraus für jede Hilfe können Sie mir anbieten. Im auf CentOS, wenn das eine Hilfe ist, dies alles über SSH getan wird.

War es hilfreich?

Lösung

perl -e 'foreach $f (glob("File\\ Name*")) { $nf = $f; $nf =~ s/(\d+)$/sprintf("%03d",$1)/e; print `mv \"$f\" \"$nf\"`;}'

Ein bisschen übertrieben vielleicht, aber es tut, was gefragt wird.

Andere Tipps

find . -type d -print0 | xargs -0 rename 's/(\d+)/sprintf "%03d", $1/e' 

oder so ähnlich, sofern

  1. Sie haben GNU finden und GNU xargs (für -print0 und -0)
  2. Sie haben die ‚Umbenennen‘ Dienstprogramm, das mit Perl
  3. kommt
  4. Es gibt nur eine Gruppe von Ziffern im Dateinamen. Wenn es mehr als eine ist, dann müssen Sie etwas mit dem regulären Ausdruck tun, um es nur die Nummer, die Sie formatieren möchten, machen lassen.

Ist das eine einmalige Sache? Wenn ja, werde ich etwas vorschlagen, das könnte scheinen ein Polizist zu sein, indem viele Programmierer hier:

Rohr die Ausgabe Ihres Befehls (find -type d | sort -r | grep ' [1-9][0-9]$') in eine Datei und einen Editor verwenden, zusammen mit einigen globalen Suchen / Ersetzen Magie ein Skript zu erstellen, das die Umbenennungen der Fall ist.

Dann das Skript wegzuwerfen.

Es gibt wenig Aufwand und wenig Chancen, dass Sie sich in den Fuß zu schießen am Ende dann durch einige Versuch, die an einer cleveren (aber nicht ausreichend ausgetestet) Einzeiler in das Unkraut auf Ihre Dateien gehen.

Ausführen zwei Befehle, die in dieser Reihenfolge:

$ rename 's/File Name (\d)$/File Name 0$1/' *
$ rename 's/File Name (\d\d)$/File Name 0$1/' *

Zuerst ein umbenennt alles weniger als 10 und prepends eine Null. Die zweite umbenennt alles weniger als 100 und prepends eine Null. Das Ergebnis sollte drei Ziffern für alle Dateinamen sein.

In meinem debian es funktioniert gut mit Umbenennungs, getestet mit 300 Dateien.

 perl -e 'map `touch door$_.txt`, 1..300;'
 rename 's/(\d+)\.txt/sprintf("%03d.txt", $1)/e' *.txt

Ich denke, mmv ist dein Freund hier.

Sie etwas mit Perl oder Ruby tun könnten.

all diese Dateien im selben Verzeichnis

dirlisting = DIR.entries('.')

dirListing.each do |file| 
 num = file.match(/\d+$/).to_i
 if num < 100
   find the position where start the number, with index and inject the 0 there.
 end
end
use strict;
use File::Copy;

my @files = glob 'File*Name*';

foreach my $filename (@files) {
    if ($filename =~ m`^.*File.*Name.*?(\d+)`) {
        my $number = $1;
        next if ($number > 99);
        rename $filename, sprintf("FileName%03d",$number);
    }
}

Wenn Sie Ihre Fernbedienung hat Bash-Shell

for i in File*; 
do 
    case "${i##* }" in  [0-9][0-9] ) 
      echo  mv "$i" "${i% *} $(printf "%03d" ${i##* })" ;; 
    esac; 
done

entfernen "Echo" zu tun tatsächliche Umbenennung

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top