O shell expande o curinga, portanto, ls
obtém backup.log
como um dos parâmetros.
Use um padrão estendido (ativado por shopt -s extglob
):
ls !(backup).log
Gostaria de listar todos os arquivos com extensão .log
, exceto o arquivo backup.log
.
Eu tentei usar este comando:
ls *.log -I "backup.log"
Mas todos os arquivos de log estão listados, até backup.log
!
Como eu poderia listar todos os arquivos de log, exceto backup.log
?
Uma possibilidade seria:
find . -maxdepth 1 -mindepth 1 -name \*.log -a -not -name backup.log
i.e. encontre todos os arquivos no diretório atual ou abaixo, com uma profundidade exata de 1 (portanto, apenas no diretório atual e não no nome do próprio diretório atual) com o nome correspondente ao padrão *.log
e não backup.log
TXR :
$ ls *.patch
install-tests.patch match.patch netbsd.patch specials.patch wlist.patch
$ txr -t '(glob "*.patch")'
install-tests.patch
match.patch
netbsd.patch
specials.patch
wlist.patch
$ txr -t '(set-diff (glob "*.patch") (glob "[mn]*.patch"))'
install-tests.patch
specials.patch
wlist.patch
você pode pular a palavra-chave Backup da expansão de shell usando! (keyword)
ubuntu@vm-ubuntu:~$ ls *.log
1.log 2.log backup.log
ubuntu@vm-ubuntu:~$ ls !(backup).log
1.log 2.log
E quanto à análise da saída de ls
a grep
:
ls -l *.log | grep -v backup.log