É 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
)