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,
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.)
Verwenden Sie das umbenennen -Skript so:
$ rename 's/^/PRE_/' *
Es gibt keine Probleme mit Metazeichen oder Leerzeichen in Dateinamen.
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.
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.
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.
Wenn Sie Ruby haben (1.9+)
Ruby -e 'Dir["*"].each{|x| File.rename(x,"PRE_"+x) }'
mit Perl:
Perl -e 'rename $_, "PRE_$_" for <*>'
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: $!";
}
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
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