Por que o rm comanda o sinalizador w não reconhecido no AIX?

1

Eu tenho um script bash que retém as últimas 5 cópias no AIX assim:

rm 'ls -lt /path/the_file_* | tail -n +6'

Mas recebo este erro:

rm: Not a recognized flag: w

UPDATE

O comando ls retorna isso:

-rw-r--r--    1 user   group1           14 Mar 11 09:54 the_file_20130311.bz2

Alguma pista sobre isso?

    
por huahsin68 11.03.2013 / 03:22

2 respostas

4

O que você diz é essencialmente

rm -rw-r--r-- 1 user group1 14 Mar 11 09:54 the_file_20130311.bz2

Em outras palavras. Remover arquivos recursivamente denominados:

1
user
group1
14
Mar
...

Se houver um -w sinalizador para rm e as outras esquisitices em -rw-r--r--

Uma opção melhor seria usar ls -t . Não se preocupe se não estiver em linhas separadas, pois ls detecta se a saída é para um tty ou não.

Demonstrado por, por exemplo:

ls -t | cat

Mas então surge outro problema, e esse é o fato de você não estar no diretório correto. Então, o que você diz é, na verdade, remover arquivos no diretório atual, que tem o mesmo nome dos últimos 6 em /path/ .

Portanto, verifique se você está no caminho correto primeiro ou, outra opção, se puder instalar o GNU find em seu sistema, seria algo na direção de:

find /path/to/files -maxdepth 1 -type f -name 'the_file_*' -printf '%T@ %p\n' |
  sort -nr | head -n6 | cut -f2- -d" "

Note que você precisa do caminho completo para obter uma listagem correta.

Então; se isso parece OK, adicione-o a uma rotina rm .

    
por 11.03.2013 / 04:09
1

O que o comando ls ... retorna? Lembre-se de que esse comando é executado e a saída é fornecida para rm como argumentos. Nada faz com que a saída seja "nomes de arquivos". Se realmente deve haver um arquivo -w , talvez -- termine sinalizadores no AIX, e deve ser rm -- ...

Atualização:

Oh, escorregão cerebral. O ls -l fornecerá não apenas os nomes dos arquivos, mas também as permissões, por exemplo, -rw... e (conforme explicado acima) rm considera isso como sinalizadores. Você deveria fazer:

rm 'ls -t /path/the_file_* | tail -n +6'

E alguns comandos (é uma convenção da GNU que muitos outros escolheram) usam -- , significando "flags end here". Então, para deletar um arquivo chamado -rf você pode fazer rm -- -rf , e em geral para não pegar flags espúrios, você pode dizer cmd -flags -x -y -- anything goes here .

    
por 11.03.2013 / 03:50

Tags