nome do produto
A maneira mais simples seria usar rename
ou prename
, que é um script Perl (se você é um usuário ksh
ou mksh
, esse shell tem a função rename
integrada, que é diferente, por uma questão de consistência, eu vou usar prename
quando se referir a esse script Perl; alternativamente, você pode chamar /usr/bin/rename
- caminho completo para o executável).
$ ls
Session 1/ Session 2/ Session 3/ Session 4/ Session 5/ Session 6/ Session 7/ Session 8/
$ prename 's/Session/Folder/' Session*/
$ ls
Folder 1/ Folder 2/ Folder 3/ Folder 4/ Folder 5/ Folder 6/ Folder 7/ Folder 8/
Se você precisar de uma pesquisa recursiva ou garantir que encontrou o tipo certo de item (talvez você também tenha arquivos com a palavra "Session" no nome do arquivo), é possível combinar isso com find
utility:
$ ls
Folder 1/ Folder 2/ Folder 3/ Folder 4/ Folder 5/ Folder 6/ Folder 7/ Folder 8/
$ find -maxdepth 1 -type d -name "Session *" -exec prename 's/Session/Folder/' {} \;
$ ls
Folder 1/ Folder 2/ Folder 3/ Folder 4/ Folder 5/ Folder 6/ Folder 7/ Folder 8/
Um pouco longo, talvez um pouco redundante, mas funciona.
mv
O pequeno problema com mv
é que precisamos alterar o nome do destino a cada vez, então, por si só, ele não pode fazer o que queremos. Para fazer isso, teríamos que combiná-lo com algumas outras ferramentas, como as ferramentas find
ou bash
.
$ ls
Session 1/ Session 2/ Session 3/ Session 4/ Session 5/ Session 6/ Session 7/ Session 8/
$ for dir in Session*/ ; do mv "${dir}" "Folder ${dir##*\ }" ;done
$ ls
Folder 1/ Folder 2/ Folder 3/ Folder 4/ Folder 5/ Folder 6/ Folder 7/ Folder 8/
O que você vê aqui é que estamos circulando todos os itens que contêm a palavra Session
neles e são o diretório. Usamos a expansão de parâmetro '$ {dir ## * \} "para extrair tudo após o espaço no nome do diretório (que é o respectivo número) e formar uma nova string" Folder / ".
Nos comandos prename
e mv
, usamos globbing, o que significa que essas abordagens renomearão todos os diretórios que contenham a palavra "Session", mesmo "Session blah". Não é o ideal, é claro, mas para o caso específico em que você sabe que a nomeação da pasta é consistente, isso funcionará. Alternativamente, poderíamos aumentar o comando com for dir in Session\ [1-9] ; do . . .done
.
Em outras palavras, essa abordagem pode funcionar, mas é muito simplista e não é a melhor.
Python
Claro, outras ferramentas também podem ser usadas. Por exemplo, Python:
$ ls
Session 1/ Session 3/ Session 5/ Session 7/
Session 2/ Session 4/ Session 6/ Session 8/
$ python -c 'import os,shutil;map(lambda x:shutil.move(x,x.replace("Session","Folder")),os.listdir("."))'
$ ls
Folder 1/ Folder 2/ Folder 3/ Folder 4/ Folder 5/ Folder 6/ Folder 7/ Folder 8/