移動先のディレクトリが存在しない場合、mv でそのディレクトリを作成する方法はありますか? 質問する

移動先のディレクトリが存在しない場合、mv でそのディレクトリを作成する方法はありますか? 質問する

では、ホームディレクトリにいて、 foo.c を ~/bar/baz/foo.c に移動したいが、それらのディレクトリが存在しない場合、それらのディレクトリを自動的に作成する方法はありますか?そうすれば、次のように入力するだけで済みます。

mv foo.c ~/bar/baz/ 

それですべてうまくいくでしょうか? ディレクトリが存在するかどうかをチェックし、存在しない場合は mkdir を呼び出してから mv を呼び出す単純な bash スクリプトに mv をエイリアスできるようですが、もっと良いアイデアがあるかどうか確認してみようと思いました。

ベストアンサー1

このワンライナー (bash で) はどうでしょうか:

mkdir --parents ./some/path/; mv yourfile.txt $_

詳しく見てみましょう:

mkdir --parents ./some/path
# if it doesn't work; try
mkdir -p ./some/path

ディレクトリ(すべての中間ディレクトリを含む)を作成します。その後、次の処理が実行されます。

mv yourfile.txt $_

ファイルをそのディレクトリに移動します ($_ は、前のシェル コマンドに渡された最後の引数、つまり新しく作成されたディレクトリに展開されます)。

これが他のシェルでもどの程度機能するかはわかりませんが、何を探すべきかについてのアイデアが得られるかもしれません。

このテクニックを使用した例を以下に示します。

$ > ls
$ > touch yourfile.txt
$ > ls
yourfile.txt
$ > mkdir --parents ./some/path/; mv yourfile.txt $_
$ > ls -F
some/
$ > ls some/path/
yourfile.txt

おすすめ記事