Tem certeza de que é /data//links/a 1
na mensagem de erro? Eu esperaria /links//data/a 1
…
Blanks não são o problema. Veja o que seu echo
deu a você. Seu $file
já contém /data/
string. O pedaço de código
"/data/${file}" "/links/${file}"
adiciona /data/
ou /links/
a uma string onde /data/
já é.
A solução mais fácil é tornar $file
não contendo /data/
:
cd /data
for file in *; do
# the rest of your script
# in general remember you're in a different dir now
Como alternativa, você pode manter for file in /data/*;
e remover a parte excessiva mais tarde:
for file in /data/*; do
file=$(basename "$file")
# the rest of your script
A solução acima gerará vários processos porque basename
é um executável separado. Por esse motivo, você pode querer que o trabalho seja feito pelo próprio shell:
for file in /data/*; do
file="${file##*/}"
# the rest of your script
A sintaxe ${file##*/}
imprime $file
, mas remove a string mais longa que corresponde a */
da frente dela. O efeito é que lhe dá o que quer que exista após o último /
.