2011-08-19 2 views
7
私は mkdirを使用して /home/chris/Downloadsにディレクトリのタイトルに現在の日付を作りたい

date -Iディレクトリのタイトルをbashの日付にしますか?

私は私の名前のフォルダを取得 MKDIR「日付-I」 を試してみました「日付-I」がなければ引用符、それはそれを、変数を作成しようとするとエラー

mkdir: invalid option -- 'I' 

を与える

date= date -I 
mkdir -p $date 

のオプションが-pの場合、見た目は良さそうでしたが、検査時にはフォルダが作成されませんでした。 -pを削除すると、エラー

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

私を取得し、それは変数が空であることではありません

以前のようにしても、パス全体に

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

それを指していることは、私はエコー、私に同じエラーを取得しますその値は私が期待するべきものです。ディレクトリが作成される前に値が代用されていないようです。この問題を回避する方法は何でしょうか?私がUbuntu 11.04(Natty Narwhal)を実行していれば、それ以上の情報が得られます。

+0

解決策は '$ date'変数を設定する必要はありませんが、そのための構文はオフになっています。変数の代入では、 '='の前後にスペースを入れることはできません。 'date = date -I'は' $ date'を空の文字列にセットし、 'date -I'を実行します。 'date = foobar date -I'と似ていますが、' $ date'は 'foobar'ではなく空の文字列に設定されています。正しい構文は 'date = $(date -I)'です。 –

答えて

12

あなたの構文が間違っている:

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

または

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

+3

+1。習慣としては、シェル変数の拡張を引用することをお勧めします。 'mkdir -p/tmp /" $(date -I) "'。明らかに 'date'は問題ではありませんが、他のコマンドでは可能です。 'mkdir -p/tmp/$(echo foo bar)'はあなたが期待していることをしません。 – Nemo

+1

また、すべてのPOSIXシェルがバックチックをサポートしているので、バッククォートよりも '$()'を優先します。バックティックとは異なりネストすることができ、読みやすくなります。 – jw013

3

これを使用します。バックテックは、コマンドを印刷する代わりに実行します。

mkdir `date -I` 
0

も(それは良い習慣だかどうかわからしかし、ではない)xargsのを試すことができます動作します

date -I | xargs mkdir