C'est une mauvaise idée (d'avoir des caractères étranges dans les noms de fichiers) mais vous pourriez faire
mv somefile.txt "foo
bar"
(vous auriez aussi pu faire mv somefile.txt "$(printf "foo\nbar")"
ou mv somefile.txt foo$'\n'bar
, etc ... les détails sont spécifiques à votre shell. J'utilise zsh
)
En savoir plus sur le globbing , par exemple glob (7) . Les détails peuvent être spécifiques au shell. Mais comprenez que cela /bin/mv
est donné (par votre shell), via execve (2) , un tableau étendu d'arguments: l'expansion des arguments et la globalisation sont la responsabilité du shell appelant.
Et vous pouvez même coder un petit programme C pour faire de même:
#include <stdio.h>
#include <stdlib.h>
int main() {
if (rename ("somefile.txt", "foo\nbar")) {
perror("rename somefile.txt");
exit(EXIT_FAILURE);
};
return 0;
}
Enregistrez le programme ci-dessus foo.c
, compilez-le avec gcc -Wall foo.c -o foo
puis exécutez./foo
De même, vous pouvez coder un script similaire en Perl, Ruby, Python, Ocaml, etc ....
Mais c'est une mauvaise idée. Évitez les sauts de ligne dans les noms de fichiers (cela déroutera l'utilisateur et pourrait casser de nombreux scripts).
En fait, je recommande même de n'utiliser que des lettres, des chiffres et des +-/._%
caractères non accentués (en /
étant le séparateur de répertoire) dans les chemins de fichiers. Les fichiers "cachés" (commençant par .
) doivent être utilisés avec prudence et parcimonie. Je pense que l'utilisation de tout type d'espace dans un nom de fichier est une erreur. Utilisez un trait de soulignement à la place (par exemple foo/bar_bee1.txt
) ou un moins (par exemple foo/bar-bee1.txt
)