2011-08-19 16 views
7

Voglio fare la data corrente nel titolo di una directory in /home/chris/Downloads utilizzando mkdir e date -IRendere il titolo di una directory la data in bash?

ho cercato mkdir "data -I" che mi fa una cartella denominata "data -I" Senza le virgolette dà l'errore

mkdir: invalid option -- 'I' 

Cercando di fare una variabile successiva

date= date -I 
mkdir -p $date 

con l'opzione -p, sembrava buono, ma dopo l'ispezione, la cartella non è stata creata. rimozione -p mi ottiene l'errore

mkdir: cannot create directory `/home/chris/Downloads/': File exists 

e persino punta alla intero percorso

date= date -I 
mkdir "/home/chris/Downloads/$date" 

me ottiene lo stesso errore di prima

Non è che la variabile è vuota, mi associo 'd e il valore è quello che dovrei aspettarmi, sembra essere che il valore non viene sostituito prima della creazione della directory. Quale sarebbe il modo per aggirare questo problema? Sto usando Ubuntu 11.04 (Natty Narwhal) se questo ti dà più informazioni.

+0

La soluzione non richiede l'impostazione di una variabile '$ date', ma la sintassi per farlo è disattivata, e non solo a causa dei backtick mancanti o $ (...). In un assegnamento di variabile, non puoi avere spazi prima o dopo '='. 'date = date -I' imposta' $ date' sulla stringa vuota, quindi esegue 'date -I'. È proprio come 'date = foobar date -I' eccetto che' $ date' è impostato sulla stringa vuota piuttosto che su 'foobar'. La sintassi corretta sarebbe 'date = $ (date -I)'. –

risposta

12

tua sintassi è sbagliata:

mkdir -p /home/chris/downloads/$(date -I) 

o

mkdir -p /home/chris/downloads/`date -I` 

funzionerà

+3

+1. Anche se, come abitudine, suggerirei di mettere le virgolette sulle espansioni variabili della shell: 'mkdir -p/tmp /" $ (date -I) "'. Obivously non ha importanza per 'date', ma per altri comandi è possibile. 'mkdir -p/tmp/$ (echo foo bar)' non fa quello che ci si potrebbe aspettare. – Nemo

+1

Preferiamo anche '$()' sui backtick dato che tutte le shell POSIX lo supportano, può essere nidificato a differenza di backtick ed è più facile da leggere. – jw013

3

Utilizzare questo: i backtick eseguono il comando anziché stamparlo.

mkdir `date -I` 
0

può anche provare xargs (tuttavia, non so se si tratta di una buona pratica)

date -I | xargs mkdir 
Problemi correlati