copia todos os arquivos que não possuem extensão

5

Podemos copiar alguns arquivos por extensões como esta:

cp *.txt ../new/

mas como posso copiar todos os arquivos sem extensão?

    
por Hossein Nasr 03.07.2015 / 03:56

3 respostas

15

A resposta de @ ubaid-ashraf está quase lá. A maneira de especificar o arquivo sem extensão, em ksh , seria:

cp -- !(*.*) /new/path/

para que qualquer arquivo com ponto no nome do arquivo seja ignorado.

Para que isso funcione em bash , é necessário ativar a opção extglob ( shopt -s extglob ) e a opção kshglob em zsh ( set -o kshglob ).

    
por 03.07.2015 / 06:17
6

Você pode fazer algo como:

cp -- !(*.txt) /path/to/directory

O código acima irá copiar todos os arquivos sem a extensão .txt. Você também pode dar várias extensões através de um caractere de pipe.

Por exemplo:

cp -- !(*.txt|*.c|*.py) /path/to/directory
    
por 03.07.2015 / 04:15
3

Você pode usar o comando find + grep para obter apenas arquivos sem extensão

   find . -maxdepth 1 -type f | sed 's/^\.\///' | grep -v "\."

Então, o seu comando de cópia será

   cp ' find . -maxdepth 1 -type f | sed 's/^\.\///' | grep -v "\." ' destination_folder
    
por 03.07.2015 / 05:49