2013-12-05 5 views
-1

У меня есть папка с 50 + файлами. Формат имен файлов является «пространство имен. -.? Пространства обозначения расширенияBatch Renaming in Linux

Как бы команда, чтобы скопировать эти реверсирования имени и обозначение для каждого файла формулироваться

OpenSUSE 12.3 x64 KDE

Спасибо заранее

+0

Можете ли вы привести пример файла до и после переименования? – piokuc

ответ

0

давайте предположим, что имя или обозначение не содержит ни ., ни -.

Я обычно делаю это что-то вроде ls -la | awk '{fn1=$10; split(fn1, file_ext, "."); split(file_ext[1], name_designation, " - "); fn2=name_designation[2] " - " name_designation[1] "." file_ext[2]; print "mv " fn1 " " fn2 }' | bash

Я знаю, это нехорошее решение, но оно работает (с ограничениями выше).

+0

регулярное выражение сделало бы трюк намного проще ... –

+0

перед тем, как попробовать, удалите | bash в конце, чтобы увидеть, если все команды в порядке. –

1

Я склонен, как что-то вроде так:

for orig in *\ -\ *.*; do 
    BASE=${orig%.*} 
    EXT=${orig##*.} 
    NS=${BASE% - *} 
    SD=${BASE#* - } 
    echo mv "$orig" "$SD - $NS.$EXT" 
done 

и удалить echo, если она выглядит (а-ля @VX «s„удалить | Баш“)

man bash и прокрутите список до Раздел «Расширение параметров».

+0

(обратите внимание, что даже если «эхо» не покажет его, это будет правильно указывать аргументы, а «mv» будет видеть ровно 2) –

0

Вы имеете в виду у вас есть файлы:

name - designation.extension 

и вы хотите:

designation - name.extension 

? (Сохраняя пространство, так как вы не говоря уже о принятии их)

затем:

find /some/path -name '* - *.*' -print | sed -e 's/^\(.*\) - \(.*\)\.\([^\.]*\)$/mv "&" "\2 - \1.\3"/' > script_to_rename.sh 

и если script_to_rename.sh выглядит хорошо,

. ./script_to_rename.sh 

выполнить его

+0

это предполагает довольно много вещей (на этот раз у вас нет « - 'in/some/path вообще ... и другие вещи, подобные этому. БУДЬТЕ ОСТОРОЖНЫ) –

1

Команда переименования хорошо здесь:

$> ls ./*txt 
./foo - bar.txt ./foo.txt 

$> rename -nv 's/(\w*) - (\w*)/$2 - $1/' ./*txt 
./foo - bar.txt renamed as ./bar - foo.txt 

n останавливает команду от фактического переименования файлов, поэтому вы можете попробовать столько регулярных выражений, сколько хотите, прежде чем, наконец, попробуйте переименовать.