Mover arquivos sem extensão

2

Eu tenho 5 arquivos em um diretório

log.txt
abc.pdf
def.ppt
1CC
1DD

Agora quero mover arquivos sem extensão, ou seja, 1CC e 1DD para outro diretório, ou seja, árvore.

sempre que eu estiver usando o comando manualmente, ele funcionará.

command : 
shopt -s extglob
mv !(*.*) tree

mas em um script bash ele mostra o erro script:

#/bin/bash
mkdir tree
shopt -s extglob
mv !(*.*) tree/

e salvo como stuct.sh depois de executá-lo

mostra o seguinte erro:

struc.sh: line 11: syntax error near unexpected token '('
struc.sh: line 11: 'mv !(*.*) tree/'

Eu não tenho ideia do porque isso está acontecendo. Por favor, forneça solução para o mesmo. obrigado

    
por Capt.waheed 03.05.2014 / 07:41

1 resposta

2

Isso porque você está usando caracteres especiais em seu script. Você terá que escapar deles.

Você pode usar melhor find para isso:

find . -maxdepth 1 -type f ! -name "*.*" -exec mv -t ./tree/ {} \+

Este comando irá:

  • find search
  • . no diretório atual
  • -maxdepth 1 com uma profundidade de 1 (portanto, nenhum subdiretório)
  • type -f apenas arquivos
  • ! -name "*.*" em que o nome do arquivo não corresponde a *.*
  • -exec mv -t ./tree/ {} \+ executa o comando mv , o argumento -t especifica o diretório de destino ( tree no diretório atual ( . )) e acrescenta ( \+ ) o nome do arquivo ( {} ) a ele.

Isso funcionará no seu script bash e não tentará mover diretórios ou seu próprio diretório tree para si mesmo (o que seu comando mv tentará).

    
por 03.05.2014 / 10:27