Como posso usar um curinga para corresponder apenas aos arquivos, não aos diretórios?

6

Eu tenho uma pasta chamada home/homeLife

Eu tenho um arquivo chamado home1 home2 e home3 armazenado em / home

Eu quero mover todos os arquivos que começam com home* para home/homeLife/. .

eu digitei

mv home* /home/homeLife
cannot move homeLife into subdirectory of itself

Minha pergunta: Como posso excluir diretórios?

    
por Michael Bruce 09.03.2015 / 17:43

5 respostas

8

Com zsh , use qualificadores glob:

mv home*(.) dst 

move apenas arquivos regulares .

Enquanto

mv home*(^/) dst 

move arquivos de qualquer tipo exceto diretórios.

mv home*(^-/) dst

também excluiria links simbólicos para diretórios.

    
por 09.03.2015 / 18:30
4

Você pode usar o find. O seguinte deve funcionar.

find . -name home\* -type f -maxdepth 1 -exec mv {} /home/homeLife/. \;
    
por 09.03.2015 / 18:36
2

Você já está perto. Para mover seus arquivos home1 , home2 , home3 use o padrão de globbing home? .

mv home? /home/homeLife/

O ? denota qualquer caractere único, enquanto o * denota qualquer quantidade de caracteres (incluindo nenhum).

    
por 09.03.2015 / 17:47
2

Portavelmente, você pode remover sua lista de correspondência do glob:

set --; cd /home
for f in ./home*
do  [ ! -L "$f" ] && 
      [ -f "$f" ] && 
      set "$@" "$f"
done
[ "$#" -eq 0 ] || mv "$@" ./homeLife
    
por 10.03.2015 / 05:34
1

Você pode usar globs estendidos bash:

shopt -s extglob                ## activate extglogs if not yet done
mv  home!(*Life) homeLife/      ## !(p1|...) = anything except one of the patt
    
por 09.03.2015 / 21:10