rm curinga não está funcionando

4

Eu quero excluir todos os arquivos .swp recursivamente. No entanto:

rm -r *.swp

Dá:

rm: cannot remove ‘*.swp’: No such file or directory

Só para ter certeza, ls -all dá:

total 628
drwxr--r--.  8 przecze przecze   4096 Aug  3 18:16 .
drwxr--r--. 31 przecze przecze   4096 Aug  3 18:14 ..
-rwxrwxr-x.  1 przecze przecze    108 Jul 28 21:41 build.sh
-rwxrwxr-x.  1 przecze przecze 298617 Aug  3 00:52 exec
drwxr--r--.  8 przecze przecze   4096 Aug  3 18:08 .git
drwxrwxr-x.  2 przecze przecze   4096 Aug  3 18:14 inc
-rw-rw-r--.  1 przecze przecze    619 Aug  3 00:52 main.cc
-rw-r--r--.  1 przecze przecze  12288 Aug  3 17:29 .main.cc.swp
-rw-rw-r--.  1 przecze przecze    850 Aug  1 00:30 makefile
-rw-------.  1 przecze przecze 221028 Aug  3 01:47 nohup.out
drwxrwxr-x.  2 przecze przecze   4096 Aug  3 00:52 obj
drwxrwxr-x.  2 przecze przecze   4096 Aug  3 00:52 out
drwxrwxr-x. 12 przecze przecze   4096 Aug  3 18:14 runs
-rwxr--r--.  1 przecze przecze  23150 Aug  2 18:56 Session.vim
drwxrwxr-x.  2 przecze przecze   4096 Aug  3 18:14 src
-rw-rw-r--.  1 przecze przecze  13868 Jul 31 19:28 tags
-rw-rw-r--.  1 przecze przecze   2134 Aug  3 00:31 view.py
-rw-r--r--.  1 przecze przecze  12288 Aug  3 17:29 .view.py.swp

Portanto, há *.swp arquivos para excluir! E rm .build.sh.swp excluiu com sucesso um deles. O que estou fazendo errado?

    
por Przemysław Czechowski 03.08.2017 / 18:23

2 respostas

2

Tente combinar o ponto:

$ rm -r .*.swp

Espero que isso resolva seu problema.

    
por 03.08.2017 / 18:26
2

É o recurso Bash controlado pela opção dotglob shell descrita em man page :

If set, bash includes filenames beginning with a '.' in the results of pathname expansion.

Como é um recurso Bash , ele causa outros comandos, como grep , ls etc. não manipulam arquivos que começam com . se o dotglob não estiver definido como bem. Você pode verificar se dotglob está definido em seu sistema usando shopt incorporado, deve ser off se você tiver esses problemas:

$ shopt | grep dotglob
dotglob         off

Se shopt foi definido, * corresponderia a todos os arquivos , mesmo esses com . . Veja este exemplo:

$ touch a b c .d
$ ls *
a  b  c
$ ls *d
ls: cannot access '*d': No such file or directory
$ shopt -s dotglob
$ shopt | grep dotglob
dotglob         on
$ ls *
.d  a  b  c
$ ls *d
.d

Quando dotglob está desativado, você ainda pode criar um padrão para manipular arquivos no diretório atual junto com arquivos ocultos:

ls .[!.]* *

ou

ls .[^.]* *
    
por 03.08.2017 / 18:58