É uma má ideia (ter caracteres estranhos nos nomes dos arquivos), mas você pode fazer
mv somefile.txt "foo
bar"
(você também pode ter feito mv somefile.txt "$(printf "foo\nbar")"
ou mv somefile.txt foo$'\n'bar
, etc ... detalhes são específicos do seu shell. Estou usando zsh
)
Leia mais sobre globbing , por exemplo, glob (7) . Os detalhes podem ser específicos do shell. Mas entenda que /bin/mv
é fornecido (pelo seu shell), via execve (2) , uma matriz expandida de argumentos: expansão de argumentos e globbing são de responsabilidade do shell de chamada.
E você pode até codificar um pequeno programa C para fazer o mesmo:
#include <stdio.h>
#include <stdlib.h>
int main() {
if (rename ("somefile.txt", "foo\nbar")) {
perror("rename somefile.txt");
exit(EXIT_FAILURE);
};
return 0;
}
Salve o programa acima foo.c
, compile-o gcc -Wall foo.c -o foo
e execute./foo
Da mesma forma, você pode codificar um script semelhante em Perl, Ruby, Python, Ocaml, etc.
Mas isso é uma péssima ideia. Evite novas linhas nos nomes de arquivos (isso confundirá o usuário e poderá quebrar muitos scripts).
Na verdade, eu recomendo usar apenas letras, dígitos e +-/._%
caracteres não acentuados ( /
sendo o separador de diretório) nos caminhos dos arquivos. Arquivos "ocultos" (começando com .
) devem ser usados com cautela e parcimônia. Acredito que usar qualquer tipo de espaço em um nome de arquivo seja um erro. Use um sublinhado (por exemplo foo/bar_bee1.txt
) ou um sinal de menos (por exemplo foo/bar-bee1.txt
)