Leave a comment

Comments 4

nbuwe October 20 2014, 10:03:22 UTC
В дистрибутиве perl4 был скрипт rename. Сейчас, видимо, живет уже своей отдельной жизнью - только что с большим удивлением обнаружил, что в Ubuntu он установлен по умолчанию (я так и таскаю за собой файло из 4.19 :) http://www.tecmint.com/rename-multiple-files-in-linux/

Reply

ocehb October 20 2014, 13:29:04 UTC
мне кажется, что в rename сложно использовать внешние программы.
сортировка файлов бедна, правильный shift набора файлов сделать сложно:

# touch file{01..05}.txt
# zmv -fQ 'file([[:digit:]]##).txt(On)' 'file$(print -f "%02d" $(($1+1))).txt'
# ls
# file02.txt file03.txt file04.txt file05.txt file06.txt
#

Reply

nbuwe October 20 2014, 16:08:50 UTC
Ну, там у тебя весь перл в распоряжении, так что и system и s///e доступны, да и просто произвольный код на крайний случай:

rename -n '/file(\d{2})\.txt/ or return; return if $1 % 2 == 0; $_= sprintf "foo%02d.txt", $1+1;' *
Я не то чтоб призываю так делать :), тут уж лучше честный шеловский for написать, наверно.

Reply

ocehb October 24 2014, 20:09:51 UTC
честный шелловский (bash?) for завязан на * (шелловский глоб), который
в сложных случаях приходится завязывать на множество внешних команд,
которые в случе zsh решаются модификаторами глоба, которые работают
в контексте самого процесса, т.е. в случае приведённого "сдвига" файлов
обратно сдвигаются просто сменой модификатора:

# touch file{01..05}.txt
# ls
file01.txt file02.txt file03.txt file04.txt file05.txt
# zmv -fQ 'file([[:digit:]]##).txt(On)' 'file$(print -f "%02d" $(($1+1))).txt'
# ls
file02.txt file03.txt file04.txt file05.txt file06.txt
# zmv -fQ 'file([[:digit:]]##).txt(on)' 'file$(print -f "%02d" $(($1-1))).txt'
# ls
file01.txt file02.txt file03.txt file04.txt file05.txt
#

У меня rename новый, который не перловый, и я не могу проверить, можно ли в нём
сортировать аргументы.

Reply


Leave a comment

Up