ディレクトリを同じ名前のディレクトリに移動するには?

ディレクトリを同じ名前のディレクトリに移動するには?

複数のファイルを含むディレクトリがありますfoo

.
└── foo
    ├── a.txt
    └── b.txt

同じ名前のディレクトリに移動したい。

.
└── foo
    └── foo
        ├── a.txt
        └── b.txt

現在、一時ディレクトリを作成してbarから移動し、foo名前を次のようにbar変更しています。barfoo

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一時ファイルやディレクトリを作成するために使用したいディレクトリパスに環境変数を設定する機能がありますが、mktempmacOSのユーティリティは他のBSDシステムの同じユーティリティとは少し異なる動作をするように見え、まったく異なる場所にディレクトリを作成します。 。しかし、上記はmacOSで有効です。使い方がややtmpdir=$(TMPDIR=$PWD mktemp -d)簡単tmpdir=$(TMPDIR=. mktemp -d)質問macOSでは、デフォルトの一時ディレクトリが別のパーティションにあり、そのfooディレクトリに多くのデータが含まれている場合(つまり、速度が遅くなります)

おすすめ記事