comando cp e nomi con spazi: errore strano

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
maresama
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1640
Iscrizione: mercoledì 9 gennaio 2008, 16:00

comando cp e nomi con spazi: errore strano

Messaggio da maresama »

Se faccio
cp /home/giorgio/Scrivania/prova2/*.* /home/giorgio/Scrivania/prova1 va tutto bene
se faccio
cp "/home/giorgio/Scrivania/prova2/*.*" " /home/giorgio/Scrivania/prova1"
da errore:
cp: impossibile eseguire stat di '/home/giorgio/Scrivania/prova2/*.*': File o directory non esistente

come faccio a indicare nomi di librerie che possono avere spazi in mezzo?

l'errore parte da /*.*, perchè se faccio: (ma cp prevede i caratteri jolly)
cp "/home/giorgio/Scrivania/prova2/note.ods" " /home/giorgio/Scrivania/prova1" va bene e non da errore

Per caso 'cp' non funziona bene bene?
maresama
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1640
Iscrizione: mercoledì 9 gennaio 2008, 16:00

Re: comando cp e nomi con spazi: errore strano

Messaggio da maresama »

Ho visto che posso evitare di racchiudere il nome tra "" sostituendo ogni spazio con \+spazio ma come soluzione mi piace poco
A mio avviso, cp non dovrebbe dare errore....

Ho anche visto che non va sostituendo ogni spazio con %20 (%20 se ricordo bene...)
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: comando cp e nomi con spazi: errore strano

Messaggio da UbuNuovo »

Se quoti il globbing non funziona! Devi lasciarlo "in balia" della shell.
Puoi quotare il resto del path, per esempio:

Codice: Seleziona tutto

cp "$HOME/Scrivania/prova2/"*.* "$HOME/Scrivania/prova1"
Salva l'Ucraina! 🇺🇦
maresama
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1640
Iscrizione: mercoledì 9 gennaio 2008, 16:00

Re: comando cp e nomi con spazi: errore strano

Messaggio da maresama »

Non capisco però perchè non debba funzionare...

Intanto ho scoperto che se uso '\ " in ogni spazio, non funzionano più os.path.isfile(perc) e os.path.isdir(perc)
quindi la soluzione giusta è comunque quella di racchiudere il nome con spazi tra " oppure '

Mi sembra che la gestione degli spazi nei nomi file non sia delle più felici
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: comando cp e nomi con spazi: errore strano

Messaggio da UbuNuovo »

Per quanto riguarda la shell è il comportamento normale; il quoting serve proprio per non far interpretare alla shell i caratteri con significati speciali.
se metti i caratteri jolly tra apici doppi (o singoli) questi caratteri saranno interpretati letteralmente.
Nel tuo caso cercherebbe di copiare un file con nome '*.*'.
Considera che il quoting forte (singoli apici) non permette l'espansione delle variabili, l'espansione è invece permessa dal quoting debole (doppi apici).
...quindi la soluzione giusta è comunque quella di racchiudere il nome con spazi tra " oppure '
Secondo me è anche il metodo più pratico, in certi casi potrebbe essere utile cambiare IFS.
Mi sembra che la gestione degli spazi nei nomi file non sia delle più felici
Dipende sempre dal fatto che il separatore degli argomenti predefinito (IFS) è lo spazio, inteso come '/s' cioè spazi, tab e "a capo".
Salva l'Ucraina! 🇺🇦
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2886
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: comando cp e nomi con spazi: errore strano

Messaggio da rai »

Intanto ho scoperto che se uso '\ " in ogni spazio, non funzionano più os.path.isfile(perc) e os.path.isdir(perc)
quindi la soluzione giusta è comunque quella di racchiudere il nome con spazi tra " oppure '
ciao
la gestione dei separatori di campi è molto diversa nella shell di bash e in Python quindi non confondiamo le cose :)
come dici, in python basta/bisogna racchiudere la stringa del percorso tra apici
mentre io scrivevo UbuNuovo ti ha mostrato come fare e perchè per ricomprendere col globbing anche i nomifile contenti spazi: l'espansione del carattere * è una funzione della shell, cp come ogni altro comando si limita ad agire sui parametri/ file che la shell gli passa dopo averli espansi secondo le sue (della shell) regole.
maresama
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1640
Iscrizione: mercoledì 9 gennaio 2008, 16:00

Re: comando cp e nomi con spazi: errore strano

Messaggio da maresama »

Innanzi tutto grazie per le spiegazioni (utilissime...)
Il fatto è che uno si aspetta un sistema armonizzato di comandi, ossia, nel caso di cp, che la gestione di cp, os.path.isfile(perc), os.path.isdir(perc), shell ecc sia la medesima e che ogni comando al suo interno, gestisca opportunamente i vari casi. (es: \ + spazio dovrebbe valere per tutti)
Capisco che nella realtà (a causa di gestioni diverse, in tempi diversi, e mille altri motivi) le cose non vanno così...
Per fortuna c'è l'aiuto di chi, come voi, ne sa molto di più. Grazie di nuovo.
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 3 ospiti