複数のファイルを含むディレクトリがありますfoo
。
.
└── foo
├── a.txt
└── b.txt
同じ名前のディレクトリに移動したい。
.
└── foo
└── foo
├── a.txt
└── b.txt
現在、一時ディレクトリを作成してbar
から移動し、foo
名前を次のようにbar
変更しています。bar
foo
mkdir bar
mv foo bar
mv bar foo
しかし、これは少し面倒な感じがし、bar
まだ使用されていない名前を選択する必要があります。
これを達成するためのよりエレガントで直接的な方法はありますか?それが重要な場合は、私はmacOSを使用しています。
ベストアンサー1
名前がまだ使用されていない現在のディレクトリに一時ディレクトリを安全に作成するには、mktemp -d
次のように使用できます。
tmpdir=$(mktemp -d "$PWD"/tmp.XXXXXXXX) # using ./tmp.XXXXXXXX would work too
このmktemp -d
コマンドは指定されたパスにディレクトリを作成し、X
パス名の末尾に-esが任意の英数字に置き換えられます。作成したディレクトリのパス名を返し、その値を1tmpdir
に保存します。
tmpdir
その後、すでに行ったのと同じプロセスを実行するときは、その変数を使用して次にbar
置き換えることができます"$tmpdir"
。
mv foo "$tmpdir"
mv "$tmpdir" foo
unset tmpdir
最後に、unset tmpdir
変数を削除することです。
1 一般的にしなければならないTMPDIR
一時ファイルやディレクトリを作成するために使用したいディレクトリパスに環境変数を設定する機能がありますが、mktemp
macOSのユーティリティは他のBSDシステムの同じユーティリティとは少し異なる動作をするように見え、まったく異なる場所にディレクトリを作成します。 。しかし、上記はmacOSで有効です。使い方がややtmpdir=$(TMPDIR=$PWD mktemp -d)
簡単tmpdir=$(TMPDIR=. mktemp -d)
質問macOSでは、デフォルトの一時ディレクトリが別のパーティションにあり、そのfoo
ディレクトリに多くのデータが含まれている場合(つまり、速度が遅くなります)