Encontre nomes de arquivos que não contenham uma string especificada

15

Eu gostaria de executar o oposto de:

find . -name "*2013*"

Encontre todos os arquivos no diretório atual que não contenham a string "2013" em seus nomes. Como eu posso fazer isso?

    
por user1058398 26.11.2013 / 11:42

3 respostas

23

Simplesmente:

find . ! -name '*2013*'

Adicione um ! -type d para também excluir os arquivos do tipo diretório (como . em si) ou -type f para incluir apenas arquivos regulares , excluindo todos outros tipos de arquivos (diretórios, fifos, links simbólicos, dispositivos, soquetes ...).

    
por 26.11.2013 / 11:53
3

Padrões de nome de arquivo do Ksh são suficientes:

# files with 2013
ls -d -- *2013*

# files without 2013
ls -d -- !(*2013*)

Referência

Se o seu shell é bash, você precisa executar shopt -s extglob antes de poder usar esse padrão (você pode colocá-lo em .bashrc ). Se o seu shell é zsh, você precisa executar setopt ksh_glob (você pode colocá-lo no seu .zshrc ). O Zsh também oferece ls -d -- ^*2013* , que requer um setopt extended_glob preliminar.

Dependendo do que você está fazendo com esses nomes de arquivos, ls pode não ser o comando correto a ser usado. Para armazená-los em uma matriz

filenames=( !(*2013*) )
for f in "${filenames[@]}"; do ...; done
    
por 26.11.2013 / 12:47
-2

Encontre todos os arquivos no diretório atual que não contenham uma determinada string, aqui "2013":

find . ! -name "*2013*" -type f
    
por 10.03.2017 / 11:31

Tags