Apagar as primeiras palavras de todos os nomes das pastas no diretório

0

Alguém sabe como escrever um script bash que pode renomear todas as pastas em um diretório? Ele precisa excluir as primeiras palavras de todas as pastas.

Atualmente, é assim:

ABC DEF Folder1
ABC DEF Folder2
ABC DEF Folder3
...
ABC DEF Folder1000

Exclua as letras idênticas

ABC DEF

Para alcançar

Folder1
Folder2
Folder3
...
Folder1000

Sou meio novo no Linux e não tenho a menor idéia sobre o script bash ainda. Alguém que possa fornecer dicas / soluções?

Uma prévia real ao vivo

    
por Sir hennihau 24.01.2018 / 00:19

2 respostas

2

Resposta rápida

Eu não me incomodaria com o script ... apenas rename

rename s/ABC\ DEF\ // *

s / string1 / string2 / faz com que ele pesquise & substitua string1 pela string 2.

string 1 é feita com espaços mais longos e precisa escapar deles '\', string 2 vazia '//'

finalmente * o obriga a trabalhar em todos os arquivos / diretórios no diretório atual

Leia o man rename e ele fornecerá dicas. As referências da página principal 'perlexprs' (expressões perl; significando mais man páginas), mas elas são um superconjunto de POSIXs, o que significa que você tem mais poder, mas também pode limitar-se ao posix.

    
por guiverc 24.01.2018 / 00:40
2

Para correspondências de texto simples como essa (que não exigem o poder das expressões regulares), há também mmv , por exemplo. dado

$ ls -d */
ABC DEF Folder1/   ABC DEF Folder3/  ABC DEF Folder6/  ABC DEF Folder9/
ABC DEF Folder10/  ABC DEF Folder4/  ABC DEF Folder7/
ABC DEF Folder2/   ABC DEF Folder5/  ABC DEF Folder8/

então

mmv -r 'ABC DEF *' '#1'

resulta em

$ ls -d */
Folder1/   Folder2/  Folder4/  Folder6/  Folder8/
Folder10/  Folder3/  Folder5/  Folder7/  Folder9/

FWIW não é realmente muito mais trabalho para script-lo no shell (bash, ou POSIX sh) -

for f in */; do mv -- "$f" "${f#ABC DEF }"; done
    
por steeldriver 24.01.2018 / 01:18