Sie können den neuen Dateinamen verwenden, zB sed erzeugen: Sie können wie folgt tun etwas
$ echo "test.jpg" | sed -e 's/^\(\(.\)\(.\)\(.\).*\)$/\2\/\3\/\4\/\1/'
t/e/s/test.jpg
Also, (vorausgesetzt, dass alle Verzeichnisse sind bereits erstellt) :
for f in *; do
mv -i "$f" "$(echo "$f" | sed -e 's/^\(\(.\)\(.\)\(.\).*\)$/\2\/\3\/\4\/\1/')"
done
oder, wenn Sie nicht die bash $(
Syntax:
for f in *; do
mv -i "$f" "`echo "$f" | sed -e 's/^\(\(.\)\(.\)\(.\).*\)$/\2\/\3\/\4\/\1/'`"
done
jedoch die Anzahl der Dateien unter Berücksichtigung haben, können Sie nur Perl verwenden, wie viel sed und mv Prozesse ist zum Laichen:
#!/usr/bin/perl -w
use strict;
# warning: untested
opendir DIR, "." or die "opendir: $!";
my @files = readdir(DIR); # can't change dir while reading: read in advance
closedir DIR;
foreach my $f (@files) {
(my $new_name = $f) =~ s!^((.)(.)(.).*)$!$2/$3/$4/$1/;
-e $new_name and die "$new_name already exists";
rename($f, $new_name);
}
, dass Perl ist sicherlich begrenzt auf same-Dateisystem nur , obwohl Sie File::Copy::move
verwenden können, um das zu umgehen.
1 Million Bilder wie? Das ist eine Menge Porno! –