Como remover todos os arquivos em um diretório, exceto um arquivo no Solaris [duplicado]

0

Eu tenho um diretório que contém um grande número de arquivos. Desejo excluir todos os arquivos, exceto arquivo.txt no Solaris. Como eu faço isso?

Eu tentei fazer - > rm! (UsageRequest.csv)

Mas não funcionou. O Solaris está jogando erro como "Token Inesperado" ("".

    
por Amar Kumar 30.08.2016 / 10:55

1 resposta

2

!(UsageRequest.csv) é um operador ksh globbing, ele só funciona com ksh (também com zsh -o kshglob ou bash -O extglob , mas esses shells não vêm por padrão no Solaris).

Então você precisa executar esses comandos em ksh . Observe que o /bin/sh do Solaris 11 agora é baseado em ksh93, portanto, ele funcionaria lá, mas você ainda não deve usar essas extensões não padrão em sh scripts lá.

No Solaris 10 e versões anteriores, /bin/sh é um shell Bourne. O sh padrão deve ser encontrado em outro lugar em /usr/xpg4/bin/sh . Esse sh é baseado em ksh88 . Novamente, !(x) trabalharia lá, mas não deveria ser usado lá.

Então, use:

#! /usr/bin/ksh -
rm -- !(UsageRequest.csv)

Ou:

#! /usr/xpg4/bin/sh -
ksh -c 'rm -- !(UsageRequest.csv)'

Os globos POSIX (ou Bourne) não possuem operadores de negação. Você precisaria fazer coisas complicadas como:

set -- *
for i do
  [ UsageRequest.csv = "$i" ] || set -- "$@" "$i"
  shift
done
rm -- "$@"

Ou você pode usar find :

find . ! -name . -prune ! -name '.*' ! -name 'UsageRequest.csv' \
  -exec rm -f {} +
    
por 30.08.2016 / 11:36