Este código
my_file="/tmp/file_without_spaces"
if [ -f "${my_file}" ]; then
my_ls_aaaammgg_hhss="$(ls ${my_file} -l --time-style='+%Y%m%d_%H%M%S' | cut -d' ' -f6)"
mv "${my_file}" "${my_file}_${my_ls_aaaammgg_hhss}"
fi
muda /tmp/file_without_spaces
para /tmp/file_without_spaces_aaaammgg_hhss
, por exemplo /tmp/file_without_spaces_20250218_161244
.
Como posso fazer a mesma coisa com um arquivo com espaços no nome, por exemplo
/tmp/file with spaces
?
Eu gostaria de obter /tmp/file with spaces_20250218_161244
.
O que você pode fazer usando a implementação GNU
date
e modernabash
:Remova
echo
domv
comando quando estiver satisfeito com o resultado.Observe que para arquivos do tipo symlink ,
[[
's-f
e GNUdate -r
verificarão o tipo e o mtime respectivamente do alvo, que é provavelmente o que você quer.ls -ld
(você esqueceu,-d
a propósito) verificaria o próprio symlink.Quanto ao nome do arquivo, você precisa colocar a expansão da variável entre aspas duplas para evitar que a divisão de palavras o bagunce, veja por exemplo
Você está quase lá. Se você tentar executar isso, o bash lhe dará uma pista sobre o que está errado, especificamente:
...aqui
${my_file}
será expandido em várias palavras antes de ser apresentado als
. Você pode evitar isso citando-o:(as aspas duplas dentro
$(...)
não correspondem às de fora).