Eu tenho uma coleção de arquivos que correspondem a um padrão como 'assignment02.cc', 'assignment02.h', 'assignment02.txt' etc. etc. Gostaria de copiar / renomear esses arquivos em 'assignment03.cc', 'assignment03. h ',' assignment03.txt 'e assim por diante.
Eu suspeito que isso deve ser direto usando um script de shell e sed. Até agora eu tenho:
OLD_NO=$1
NEW_NO=$2
echo "Moving from $OLD_NO to $NEW_NO"
for name in assignment$OLD_NO.* ; do
newname=$(echo $name | sed 's/\(.*\)$OLD_NO\(.*\)/\1xx$NEW_NO\2/')
echo "$name -> $newname"
# mv -v $name $newname
done
Infelizmente, a maneira como estou invocando o sed sempre retorna a string de entrada $name
e, na verdade, não faz com que o regex encontre / substitua.
Nota: Procurando na Internet, existe um rename
comando que possui essa funcionalidade, mas que não está disponível no meu MacBook.
shell-script
sed
file-management
rename
Gilles 'SO- parar de ser mau'
fonte
fonte
$OLD_NO
e$NEW_NO
não vai ficar expandida.newname=$(echo $name | tr $OLD_NO $NEW_NO)
Respostas:
Usar o sed aqui apresenta mais complexidade do que vale a pena. Use os recursos internos de manipulação de texto do shell. Por exemplo,
${name#assignment02}
retira o prefixoassignment02
de$name
.As aspas duplas não são necessárias se você tiver certeza de que os nomes dos arquivos não contêm caracteres especiais do shell.
Se você tiver o zsh disponível, sua
zmv
função será útil para esses tipos de renomeação.fonte
Você já está pensando muito complexo
'renomear' substitui o primeiro arg ('02') pelo segundo arg ('03') no nome de todos os arquivos fornecidos no arg3 ou depois (* 02 *)
fonte
rename
comando com esta sintaxe é um utilitário Linux, não disponível no OSX (e nem disponível por esse nome na maioria das instalações Debian e Ubuntu).Uma abordagem diferente:
A longo prazo: tente obter 'renomear'
fonte
Uma maneira de fazer isso é:
fonte
ls
. E gerar um script de shell é uma maneira de dar um tiro na cabeça. A pergunta de Vault Boy contém uma abordagem razoável do lado da concha, faltando apenas o encantamento sed e algumas citações.