2010-04-19 6 views
4

Как заменить один и тот же текст в именах папок в Linux?Заменить текст в именах папок

Скажем, у меня есть «Photos_Jun», «Photos_July», «Photos_Aug» и т. Д. Самый простой способ я могу переименовать их, например, «Фотографии июня», «Фотографии июля» и т. Д. (В основном я хочу заменить подчеркивание пробел «» у меня есть около 200 из этих папок

Я смотрел на решение:.. How can I easily bulk rename files with Perl?

похоже, что им ищет, однако, я не знаю, как сделать регулярное выражение для папок, являются буквенно-цифровыми, а затем «_».

Все файлы имеют нечисловые имена, поэтому я думаю, что [a-zA-Z] - это правильный путь к s терпкий.

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

Спасибо за помощь!

+0

Спасибо всем, кто ответил, не-Perl решение работает лучше для меня. У меня было несколько тире, чтобы удалить, и это сработало для этого, когда я заменил _ на -. – dannyb

ответ

2

если вы на * NIX, и вы не возражаете ноны решения Perl, вот решение оболочки (Баш). удалите echo, когда будете удовлетворены.

#!/bin/bash 
shopt -s extglob 
for file in +([a-zA-Z])*_+([a-zA-Z])/; do echo mv "$file" "${file//_/ }"; done 
+0

Это сработало, мне пришлось удалить «эхо», чтобы он работал, спасибо! – dannyb

+0

небольшая поправка. если вам нужны только папки, поместите черту. см. править. – ghostdog74

0
perl -e 'use File::Copy; foreach my $f (glob("*")) { next unless -d $f; my $nf = $f; $nf =~ s/_/ /g; move($f, $nf) || die "Can not move $f to $nf\n"; } 

Тот раскатать Однострочник:

use strict; # Always do that in Perl. Keeps typoes away. 
use File::Copy; # Always use native Perl libraries instead of system calls like `mv` 
foreach my $f (glob("*")) { 
    next unless -d $f; # Skip non-folders 
    next unless $f =~ /^[a-z_ ]+$/i; # Reject names that aren't "a-zA-Z", _ or space 
    my $new_f = $f; 
    $new_f =~ s/_/ /g; # Replace underscore with space everywhere in string 
    move($f, $nf) || die "Can not move $f to $nf: $!\n"; 
        # Always check return value from move, report error 
} 
3

Linux имеет rename команду:

rename '-' ' ' Photos_* 
Смежные вопросы