Remova todas as extensões em zsh

1

Digamos que eu tenha um diretório com muitos arquivos com a extensão .bak e queira removê-lo de cada um. Qual é a maneira mais simples de fazer isso? Quero dizer, um comando que faria o que se poderia esperar de mv *.bak * .

    
por Toothrot 06.02.2016 / 11:41

2 respostas

3

com zmv

O Zsh tem zmv , que oferece uma interface muito simples para renomear (ou copiar) arquivos:

autoload zmv
zmv '(*).bak' '$1'

Cada par de parênteses captura um grupo, que pode ser acessado com $1 , $2 e assim por diante. Aqui estão alguns mais alguns exemplos .

Outra maneira de fazer isso com zmv é usar a opção -W , que funciona para renomear tarefas simples:

zmv -W '*.bak' '*'

A maneira mais fácil de ter zmv sempre disponível é colocar a instrução autoload zmv no seu ~/.zshrc .

Com sintaxe Bash

Se você quiser usar a sintaxe de Bash "simples" com manipulação de string, isso seria necessário:

for f in *.bak; do mv -- "$f" "${f%.bak}"; done

Com a ferramenta rename

Existe uma ferramenta rename que está disponível em alguns Linuxes e no OS X através de brew install rename .

rename 's/.bak$//' *

O $ é necessário para capturar o final da string, e não partes no meio dos nomes dos arquivos que contêm .bak .

    
por 06.02.2016 / 11:51
0

Além das ótimas respostas dadas, há também a maneira mais antiga que deve funcionar em qualquer sistema compatível com POSIX - mesmo sem um shell moderno como bash ou zsh:

>
for f in *.bak; do mv $f 'echo $f | sed -e 's/\.bak$//''; done
    
por 05.04.2016 / 09:44

Tags