Como eu removo todos os arquivos que possuem x em seu título?

5

Eu tenho muito diretório onde existem centenas de arquivos.

Em todos os diretórios há pares de my_file-01.jpg e my_file- € 01.jpg

Desejo remover todos os arquivos que contenham o sinal € em seu título: como fazer isso?

    
por dag729 21.10.2010 / 14:22

3 respostas

8

find faz o trabalho:

find . -iname "*€*" -delete livra-se de todos os arquivos cujo nome corresponde a "", tenha cuidado, encontre também em subdiretórios, se não quiser que você tenha que ajustar os parâmetros de busca pouco

    
por 21.10.2010 / 14:27
5

Algo ao longo das linhas de

find -name '*€*' -delete

Você pode tentar isso primeiro, para ver se os arquivos corretos seriam excluídos:

find -name '*€*' -ls
    
por 21.10.2010 / 14:28
1

Em cada exemplo, o primeiro comando lista os arquivos cujo nome contém um e o segundo comando os exclui.

Usando o GNU find (como encontrado no Linux):

find -name '*€*' -ls
find -name '*€*' -delete

Adicione -type f após -name '*€*' se você quiser apenas corresponder arquivos regulares e não diretórios.

Usando o find, confiando apenas nos recursos POSIX:

find . -name '*€*' -print
find . -name '*€*' -exec rm {} +

Adicione -type f após -name '*€*' se você quiser apenas corresponder arquivos regulares e não diretórios.

Usando o bash 4 ou zsh:

echo **/*€*
rm **/*€*

Apenas em zsh, **/*€*(.) restringe a correspondência a arquivos regulares, exceto diretórios.

Se você quiser apenas listar arquivos que tenham em seus nomes e que exista um arquivo idêntico sem o , aqui estão as soluções padrão find e zsh.

find . -name '*€*' -type f -exec sh -c 'cmp -s -- "$0" "$(printf "%s" "$0" | tr -d "€")"' {} \; -print
find . -name '*€*' -type f -exec bash -c 'cmp -s -- "$0" "${0//€/}")"' {} \; -print
echo **/*€*(.e\''cmp -s -- $REPLY ${REPLY//€/}'\')
    
por 21.10.2010 / 22:43

Tags