4

新しく生成されたディレクトリが名前の一部として現在の時刻を自動的に持つスクリプトを作成したいと思います。

構文

mkdir mydir[min-hour-day-month-year]

したがって、最近のディレクトリは次のように名前が付けられます。

mydir101718052012

1時間後に作成されたディレクトリ

mydir111718052012

等々。

簡単な質問で申し訳ありませんが、私はUNIXを初めて使用し、bashを使用しています

編集:なぜ正しくフォローされていないのですか?どうすればいいですか?

newdir = mydir$( date +%Y-%m-%d-%H-%M-%S)
cp new.txt newdir/new1.txt
4

2 に答える 2

6

dateの実装がこれらのオプションをサポートしている場合は、次のようにすることができます。

mkdir mydir$( date +%M%H%d%m%Y )

サンプル出力のように、これは名前にハイフンを挿入しないことに注意してください。最初の説明のようにハイフンを取得するには:

mkdir mydir$( date +%M-%H-%d-%m-%Y )
于 2012-05-18T14:22:00.540 に答える
3

bash起動スクリプトで次の関数を設定しています。

# Date Time Stamp
dts() { date +%Y-%m-%d-%H-%M-%S; }

# Date mkdir
dmkdir() { mkdir $(dts); }

私は主にコマンドラインでそれらを使用します。スクリプト内で実行する場合は、スタートアップスクリプトを入手するか、スクリプト内でシェル関数を定義する必要があります。名前(例)を前に付けたい場合はmydir、次のような引数を簡単に付けることができます。

# Date mkdir
dmkdir() { mkdir "$@$(dts)"; }

これは次のように呼ばれます:

$ dmkdir mydir
$ ls -d mydir*
mydir2012-05-18-11-38-40

これは、引数リストにスペースが含まれている場合、それらがディレクトリ名に表示されることを意味します。これは良いことかもしれませんし、そうでないかもしれません。

シェル関数内でシェル変数を割り当てることができます。これは関数外でアクセスできます。

dmkdir() { newdir="$@$(dts)"; mkdir $newdir; }

このように使用されます:

$ dmkdir mydir
$ cd $newdir
$ pwd
/tmp/mydir2012-05-18-12-54-32

これは非常に便利ですが、注意しなければならないことがいくつかあります。1)名前空間を汚染している-$newdir別のプロセスによって作成されたと呼ばれるシェル変数を上書きする可能性がある2)どれを忘れるのは非常に簡単です変数dmkdirは、特に変数を書き出すシェル関数がたくさんある場合に書き込みます。適切な命名規則は、両方の問題に大いに役立ちます。

もう1つのオプションは、シェル関数にディレクトリ名をエコーさせることです。

dmkdir() { local newdir="$@$(dts)"; mkdir $newdir && echo $newdir; }

これは次のように呼び出すことができます。

newdir="$(dmkdir mydir)"

local$newdirこれは、Good Thing(TM)であるdmkdirの外部では使用できないことを意味します。

の使用は&&、ディレクトリの作成が成功した場合にのみディレクトリの名前をエコーすることを意味します。

この$()構文では、STDOUTにエコーされたものをすべてロードして変数にロードできます。一重引用符を使用すると、ディレクトリ名にスペースがある場合でも、単一の変数にロードされます。

これにより、前のソリューションに固有の名前空間汚染の問題が回避されます。

于 2012-05-18T15:34:45.787 に答える