wake-up-neo.net

Dateien und Verzeichnisse umbenennen (Präfix hinzufügen)

Ich möchte Präfix für alle Ordner und Verzeichnisse hinzufügen.

Beispiel:

Ich habe

Hi.jpg
1.txt
folder/
this.file_is.here.png
another_folder.ok/

Ich möchte das Präfix "PRE_" hinzufügen.

PRE_Hi.jpg
PRE_1.txt
PRE_folder/
PRE_this.file_is.here.png
PRE_another_folder.ok/

Grüße,

106
Rafael

Danke an Peter van der Heijden , hier ist einer, der für Dateinamen mit Leerzeichen funktionieren kann:

for f in * ; do mv -- "$f" "PRE_$f" ; done

("-" wird benötigt, um mit Dateien zu beginnen, die mit Bindestrichen beginnen, deren Namen andernfalls als Schalter für den Befehl mv interpretiert würden.)

175
CanSpice

Verwenden Sie das umbenennen -Skript so:

$ rename 's/^/PRE_/' *

Es gibt keine Probleme mit Metazeichen oder Leerzeichen in Dateinamen.

72
tchrist

Für Hinzufügen von Präfix oder Suffix für Dateien (Verzeichnisse) können Sie die einfache und leistungsfähige Methode von xargs verwenden:

ls | xargs -I {} mv {} PRE_{}

ls | xargs -I {} mv {} {}_SUF

Es verwendet die Parameter-Ersetzungsoption von xargs: -I. Und Sie können mehr Details auf der Manpage erfahren.

53
Zheng Qsin

Dies kann mit einem einfachen find-Befehl ausgeführt werden:

find * -maxdepth 0 -exec mv {} PRE_{} \;

Mit dem obigen Befehl werden alle Dateien und Ordner im aktuellen Verzeichnis mit PRE_ vorangestellt.

23
Cyclonecode

Um allen Dateien und Ordnern im aktuellen Verzeichnis ein Präfix hinzuzufügen, verwenden Sie rename von util-linux (im Gegensatz zu prename, der Perl-Variante von Debian und einigen anderen Systemen):

rename '' <prefix> *

Dadurch wird das erste Vorkommen der leeren Zeichenfolge (die sofort gefunden wird) ermittelt, dieses Vorkommnis wird durch Ihr Präfix ersetzt. Anschließend wird der Rest des Dateinamens bis zum Ende angeklebt. Erledigt.

Für Suffixe müssen Sie die Perl-Version verwenden oder find verwenden.

8
koyae

Wenn Sie Ruby haben (1.9+)

Ruby -e 'Dir["*"].each{|x| File.rename(x,"PRE_"+x) }'
7
kurumi

mit Perl:

Perl -e 'rename $_, "PRE_$_" for <*>'
7
tadmc

Hier ist ein einfaches Skript, das Sie verwenden können. Ich verwende gerne das Nicht-Standard-Modul File::chdir zur Verwaltung von cd-Vorgängen. Wenn Sie dieses Skript so verwenden möchten, wie es ist, müssen Sie es installieren (Sudo cpan File::chdir).

#!/usr/bin/Perl

use strict;
use warnings;

use File::Copy;
use File::chdir; # allows cd-ing by use of $CWD, much easier but needs CPAN module

die "Usage: $0 dir prefix" unless (@ARGV >= 2);
my ($dir, $pre) = @ARGV;

opendir(my $dir_handle, $dir) or die "Cannot open directory $dir";
my @files = readdir($dir_handle);
close($dir_handle);

$CWD = $dir; # cd to the directory, needs File::chdir

foreach my $file (@files) {
  next if ($file =~ /^\.+$/); # avoid folders . and ..
  next if ($0 =~ /$file/); # avoid moving this script if it is in the directory

  move($file, $pre . $file) or warn "Cannot rename file $file: $!";
}
2
Joel Berger

Auf meinem System habe ich nicht den Befehl rename. Hier ist ein einfacher Liner. Es findet alle HTML-Dateien rekursiv und fügt prefix_ vor ihren Namen hinzu:

for f in $(find . -name '*.html'); do mv "$f" "$(dirname "$f")/prefix_$(basename "$f")"; done
1
conradkdotcom

Dadurch werden Ihre Dateien in ihrem Verzeichnis vorangestellt.

Der ${f%/*} ist der Pfad bis zum letzten Schrägstrich / -> das Verzeichnis

Der ${f##*/} ist der Text ohne den letzten Schrägstrich / -> Dateiname ohne Pfad

So geht es also:

for f in $(find /directory/ -type f); do 
  mv -v $f ${f%/*}/$(date +%Y%m%d)_Prefix_${f##*/}
done
0
SteinAir