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
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?
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
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
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//€/}'\')