ディレクトリを生成するための日付スタンプエイリアス(.bashrc)

ディレクトリを生成するための日付スタンプエイリアス(.bashrc)

ディレクトリにタイムスタンプを取るために.bashrcにエイリアスを作成しようとしています。明らかに、これは私にとってあまり効果がありませんでした。たとえば、

.bashrcの下

alias testit="export testor=$(date +%d);mkdir ~/Desktop/$testor"

結果:

~> testit
mkdir: cannot create directory ‘/home/SJL/Desktop/’: File exists

今コマンドを実行すると

~> export testor=$(date +%d)
~> mkdir ~/Desktop/$testor

ディレクトリが作成されました。問題ありません。

今実行すると:

~> export testor=$(date +%d);mkdir ~/Desktop/$testor

今回も問題ありません。

.bashrcで宣言されたエイリアスを使用しても機能しません。

似たようなことを何度もやってみましたが、日付形式に問題/エラーがあるようなので本当に気になります。

ご意見ありがとうございました。

答え1

エイリアスを作成すると$testor値がないため、エイリアスは次のようになります。

export testor=13;mkdir ~/Desktop/

を使用して、エイリアスが拡張されていることを確認できますalias aliasname

この問題を解決するには、二重引用符の代わりに一重引用符を使用してください。これは、エイリアスが実際に呼び出されるまで、変数の拡張とコマンドの置換を延期します。

$testor他のものが必要ない場合は、使用してください

alias tester='mkdir "$HOME/Desktop/$(date '+%d')"'

あなたのコメントを読んだら、次のように動作します。

alias makedir='mkdir "$HOME/Desktop/$(date '+%d')"'
alias copyfile='cp somefile "$HOME/Desktop/$(date '+%d')"

または、より複雑なシェル機能を使用すると、すべてのファイルをフォルダにコピーできます(エイリアスを使用すると決して実行できない操作)。

copyfile () {
    destfolder="$HOME/Desktop/$(date '+%d')"
    if [ -d "$destfolder" ]; then
        mkdir "$destfolder"
    fi
    cp "$1" "$destfolder"
}

これは、コマンドラインで提供されたファイルを日付付きフォルダにコピーするcopyfileために使用される関数を定義します。cpフォルダがない場合は作成されます。

関連情報