では、ホームディレクトリにいて、 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