आप का उपयोग कर जैसे, SED नया फ़ाइल नाम उत्पन्न कर सकते हैं:
$ echo "test.jpg" | sed -e 's/^\(\(.\)\(.\)\(.\).*\)$/\2\/\3\/\4\/\1/'
t/e/s/test.jpg
तो, आप कुछ इस तरह कर सकते हैं (सभी निर्देशिकाओं पहले से ही बनाई गई हैं यह मानते हुए कि) :
for f in *; do
mv -i "$f" "$(echo "$f" | sed -e 's/^\(\(.\)\(.\)\(.\).*\)$/\2\/\3\/\4\/\1/')"
done
या, आप बैश $(
सिंटैक्स का उपयोग नहीं कर सकते हैं:
for f in *; do
mv -i "$f" "`echo "$f" | sed -e 's/^\(\(.\)\(.\)\(.\).*\)$/\2\/\3\/\4\/\1/'`"
done
हालांकि, फ़ाइलों की संख्या पर विचार, तुम बस पर्ल का उपयोग करने के रूप में है कि एसईडी और mv प्रक्रियाओं का एक बहुत अंडे देने के लिए है चाहते हो सकता है:
#!/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);
}
पर्ल निश्चित रूप से एक ही फाइल सिस्टम तक सीमित है कि केवल , हालांकि आप इसके आसपास पाने के लिए File::Copy::move
का उपयोग कर सकते हैं।
1 मिलियन छवियां एह? वह बहुत अश्लील है! –