回答:
おそらくそれはあなたの使用ですset。これにより、「今日」、「=」、およびdateプログラムの出力が位置パラメーター(別名、コマンドライン引数)に割り当てられます。Cシェル(これを "bash"としてタグ付けしているため、そうではない可能性が高い)を使用したいだけの場合は、以下を使用します。
today=`date +%Y-%m-%d.%H:%M:%S` # or whatever pattern you desire
等号の周りにスペースがないことに注意してください。
また&、ステートメントの最後で使用したくない場合もあります。これにより、シェルはコマンドの終了を待機しません。特に次のものに依存している場合。findそれは前に開始されているため、コマンドが失敗する可能性がありますmkdir。
というファイル内のこのbashコード a.sh
#!/bin/bash
today=`date '+%Y_%m_%d__%H_%M_%S'`;
filename="/home/el/myfile/$today.ponies"
echo $filename;
実行すると、次を印刷します。
eric@dev ~ $ chmod +x a.sh
eric@dev ~ $ ./a.sh
/home/el/myfile/2014_08_11__15_55_25.ponies
コードの説明:
スクリプトを/ bin / bashインタープリターで解釈します。todayという新しい変数を作成します。dateコマンドを実行し、Y、m、d、H、M、Sフラグを渡して出力を構成します。結果を日付変数に入れます。
filenameという名前の新しい変数を作成し、$ today変数を残りの静的ファイル名テキストで囲みます。次に、ファイル名を画面にエコーします。
それをワンライナーに詰め込み、lulzを増やします。
echo "/home/el/myfile/`date '+%Y_%m_%d__%H_%M_%S'`.ponies"
あなたはいくつかのことを混ぜたようです。
set today = 'date +%Y'tcsh構文のように見えますが、tcshでもdate +%Y変数todayに文字列を割り当てますが、dateコマンドは実行されません。おそらくbashまたは他のPOSIXシェルを使用しているので、割り当ての構文はtoday=some_value(等号の前後にスペースがない)です。コマンドを実行し、その出力を変数に割り当てるには、コマンド置換を使用します。
today=$(date +%Y-%m-%d)
(日付の指定も完了しました)。ドル括弧の代わりに逆引用符を使用することもできますが、前方引用符と視覚的に混同される傾向があり、逆引用符で囲まれたコマンド内で引用符が必要な場合のルールはかなり複雑で実装に依存するため、$(…)(これに固執しないほうがよいsaner構文でも同じ効果があります)。
&いくつかのコマンドの最後に使用しました。これにより、コマンドはバックグラウンドで実行されますが、ここでは必要ありません。私はあなたが意味を疑う&&最初のコマンドが成功した場合にのみ、次のコマンドを実行することを意味し、。
today=$(date +%Y-%m-%d)
mkdir -p The_Logs &&
find …
&&各コマンドの後に使用する代わりに、スクリプトをで開始することもできますset -e。これは、コマンドがゼロ以外のステータスを返すとすぐにスクリプトの実行を停止するようシェルに指示します(if条件内のコマンドおよび他のいくつかのケースを除く)。
set -e
today=$(date +%Y-%m-%d)
mkdir -p The_Logs
find …
あなたのfindコマンドは問題ありませんが、おそらくあなたが意図したことを実行しません(それが何であるかは確かにわかりませんが)。
を使用してディレクトリを作成し、mkdirすぐにそれを横断しfindます。ディレクトリが既に存在しない限り、これは役に立ちません。今日のログ用のディレクトリを作成し、最近のファイルをThe_Logsegなどのディレクトリに移動するつもりでしたThe_Logs.2012-02-11か?
mkdir -p "The_Logs.$today"
find The_Logs -mtime -1 -exec mv {} "The_Logs.$today" \;
または、今日のログファイルの名前を変更してサフィックスを追加するつもりでした$todayか?それには、移動するファイルごとに異なるファイル名を計算する必要があります。
find The_Logs -mtime -1 -exec sh -c 'mv "$0" "$0.$today"' {} \;
ファイルを最後に読み取った時刻では-mtimeなく-atime、変更時刻に基づいてファイルを移動するために使用したことに注意してください(システムがそれを追跡している場合-追跡していない場合、atimeはmtime)。
:、rsyncおよびscpでホストとして読み取られるため、使用しないようにしてください。stackoverflow.com/a/37143274/390066