
#!/bin/sh
if [ -e $1 ] ; then
mv $1 $1_$(date +%Y%m%d%H%M)
fi
exit 0
O meu requisito é procurar um arquivo e se o arquivo sair, renomeie o arquivo e saia do programa, precisamos renomear apenas se o arquivo sair
estou recebendo o erro mencionado acima
Responder1
De modo geral, as variáveis bash devem sempre ser colocadas entre aspas duplas.
Por exemplo, digamos que $1 seja My File.txt
. Seu script tenta fazer isso:
mv My File.txt My File.txt_201501010101
o que mv
significa que você deseja mover arquivos My
, File.txt
e My
coletivamente para o destino File.txt_201501010101
.
O que você quer é isto:
mv "My File.txt" "My File.txt_201501010101"
Consulte o seguinte para obter mais detalhes e outras armadilhas a serem evitadas: http://mywiki.wooledge.org/BashPitfalls#cp_.24file_.24target
PS exit 0
no final de um script é redundante. Se o script terminar sem erros, o status de saída será implicitamente 0.