É uma má idéia (ter caracteres estranhos em nomes de 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) . Detalhes podem ser específicos do shell. Mas entenda que /bin/mv é dado (pelo seu shell), via execve (2) , uma matriz expandida de argumentos: expansão de argumento e globbing é responsabilidade do shell de chamada.
E você pode até codificar um minúsculo programa em 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 em foo.c , compile-o com 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 má ideia. Evite novas linhas em nomes de arquivos (isso confundirá o usuário e poderá quebrar muitos scripts).
Na verdade, até recomendo usar apenas letras não acentuadas, dígitos e +-/._% caracteres (com / sendo o separador de diretório) nos caminhos de arquivo. Arquivos "ocultos" (começando com . ) devem ser usados com cautela e parcimônia. Eu acredito que usar qualquer tipo de espaço em um nome de arquivo é um erro. Use um sublinhado (por exemplo, foo/bar_bee1.txt ) ou menos (por exemplo, foo/bar-bee1.txt )