2011-08-19 13 views
7

Quiero hacer la fecha actual en el título de un directorio en /home/chris/Downloads utilizando mkdir y date -IHacer del título de un directorio la fecha en bash?

me trataron mkdir "fecha -I" que me pone una carpeta llamada "fecha -I" Sin las cotizaciones que da el error

mkdir: invalid option -- 'I' 

tratando de hacer que una variable próxima

date= date -I 
mkdir -p $date 

con la opción -p, se veía bien, pero durante la inspección, no se creó la carpeta. eliminación -p me consigue el error

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

e incluso apuntando a todo el recorrido

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

me consigue el mismo error que antes

No es que la variable está vacía, me hago eco 'd it y el valor es lo que debería esperar, parece ser que el valor no se sustituye antes de que se cree el directorio. ¿Cuál sería la forma de evitar este problema? Estoy ejecutando Ubuntu 11.04 (Natty Narwhal) si eso te da más información.

+0

La solución no requiere el establecimiento de una variable '$ date', pero su sintaxis para hacerlo está desactivada, y no solo por los palos faltantes o $ (...). En una asignación de variable, no puede tener espacios antes ni después de '='. 'date = date -I' establece' $ date' en la cadena vacía, y luego ejecuta 'date -I'. Es como 'date = foobar date -I', excepto que' $ date' se establece en la cadena vacía en lugar de 'foobar'. La sintaxis correcta sería 'date = $ (date -I)'. –

Respuesta

12

Su sintaxis es incorrecta:

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

o

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

funcionará

+3

+1. Aunque como un hábito, sugiero poner citas sobre expansiones de variable de shell: 'mkdir -p/tmp /" $ (date -I) "'. Obivamente no importa para 'date', pero para otros comandos puede. 'mkdir -p/tmp/$ (echo foo bar)' no hace lo que cabría esperar. – Nemo

+1

También prefiera '$()' sobre los backticks, ya que todos los shells POSIX lo admiten, se puede anidar a diferencia de los backticks, y es más fácil de leer. – jw013

3

Use esto: los indicadores revertidos ejecutan el comando en lugar de imprimirlo.

mkdir `date -I` 
0

También puede intentar xargs (sin embargo, no está seguro de si se trata de una buena práctica)

date -I | xargs mkdir 
Cuestiones relacionadas