È una cattiva idea (avere strani personaggi nei nomi dei file) ma potresti farlo
mv somefile.txt "foo
bar"
(avresti potuto anche fare mv somefile.txt "$(printf "foo\nbar")"
o mv somefile.txt foo$'\n'bar
, ecc ... i dettagli sono specifici per la tua shell. Sto usando zsh
)
Maggiori informazioni sul globbing , ad es. Glob (7) . I dettagli potrebbero essere specifici della shell. Ma capire che /bin/mv
è dato (dalla shell), via execve (2) , un espanso matrice di argomenti: espansione argomento e glob è la responsabilità del guscio chiamante.
E potresti persino programmare un minuscolo programma C per fare lo stesso:
#include <stdio.h>
#include <stdlib.h>
int main() {
if (rename ("somefile.txt", "foo\nbar")) {
perror("rename somefile.txt");
exit(EXIT_FAILURE);
};
return 0;
}
Salvare sopra il programma in foo.c
, compilarlo con gcc -Wall foo.c -o foo
quindi eseguire./foo
Allo stesso modo, potresti codificare uno script simile in Perl, Ruby, Python, Ocaml, ecc ...
Ma questa è una cattiva idea. Evita le nuove righe nei nomi dei file (confonderà l'utente e potrebbe spezzare molti script).
In realtà, consiglio anche di usare solo lettere, cifre e +-/._%
caratteri non accentati ( /
essendo il separatore di directory) nei percorsi dei file. I file "nascosti" (a partire da .
) devono essere usati con cautela e parcimonio. Credo che usare qualsiasi tipo di spazio nel nome di un file sia un errore. Utilizzare invece un trattino basso (ad es. foo/bar_bee1.txt
) O un segno meno (ad es. foo/bar-bee1.txt
)