Isso ocorre porque a saída do comando ls
é apenas a lista de nomes de arquivos, não o caminho deles. O comando truncate
, portanto, recriará os mesmos nomes de arquivos que os arquivos vazios no diretório atual.
Além disso, sua abordagem, mesmo que seja feita corretamente, vai invadir nomes de arquivos um tanto estranhos (aqueles que contêm um espaço, por exemplo), sem falar de outros mais complexos (com novas linhas ou barras invertidas, etc.).
Primeiro de tudo, você não precisa fazer o script. Você poderia apenas passar a lista de arquivos para truncate
:
truncate -s 0 /direcotry/to/*
Se truncate
encontrar um diretório, ele apenas imprimirá um erro e passará para o próximo item:
truncate: cannot open ‘foo’ for writing: Is a directory
Para fazer isso de maneira mais clara, você pode usar find
:
find /direcotry/to/file -type f -exec truncate -s {} +
Ou um shell glob:
for f in /direcotry/to/file; do
[ -f "$f" ] && truncate -s "$f"
done