1. ホーム
  2. linux

[解決済み] mvで移動先のディレクトリが存在しない場合、作成させる方法はありますか?

2022-02-08 22:14:11

質問内容

ホームディレクトリにいるときに、foo.c を ~/bar/baz/foo.c に移動したいが、それらのディレクトリが存在しない場合、それらのディレクトリを自動的に作成する方法はありますか?

mv foo.c ~/bar/baz/ 

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

どのように解決するのですか?

このワンライナー(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