一部のサブディレクトリがすでに存在しない場合、多くのUnixコマンドは失敗しますが、これらのコマンドでは、続行する前に欠落しているサブディレクトリを作成するのは簡単ではありません。
たとえば、次のようになりますtouch
。
% touch /tmp/foo/bar/baz/frobozz
touch: cannot touch `/tmp/foo/bar/baz': No such file or directory
% mkdir -p /tmp/foo/bar/baz
% touch /tmp/foo/bar/baz/frobozz # succeeds
同様にmv
:
% mv --target-directory=/tmp/foo/frotz/quux /tmp/foo/bar/frobozz
% mv: failed to access `/tmp/foo/frotz/quux': No such file or directory
% mkdir -p /tmp/foo/frotz/quux
% mv --target-directory=/tmp/foo/frotz/quux /tmp/foo/bar/frobozz # succeeds
この動作の注目すべき例外の1つは、「必要に応じてサブディレクトリを作成する」というフラグがmkdir
あることです。-p
touch
mv
、、et alという事実は少し混乱しています。デフォルトでは、または特定のフラグ(mkdir
s-p
など)を使用して要求時に「明白な操作」を実行しません。
これには妥当な理由があると思いますが、私にとっては明らかではありません。洞察力を歓迎します。
mmv
(この質問をした動機は、実際のユーティリティとは異なり、非標準のユーティリティmmv
と非常によく似たユーティリティを実装したいということです。会議「必要に応じてサブディレクトリを作成する」 この新機能が本当に悪い考えなのか気になります。
たとえば、私が検討しているユーティリティ(私が呼びますmmmv
)を使用すると、同時にファイルを移動して名前を変更できます。
1caf73ee55b4e11d6e3b12ccbf8c477c2839bfae
1f37fd8ce865f98579d10d8045ac1e88c6717215
73f2af84ba8ed27fa332d52745274377aa67cda5
a257a7c7cac26c391e8636193ff47b45c5e587ec
到着
1c/af73ee55b4e11d6e3b12ccbf8c477c2839bfae
1f/37fd8ce865f98579d10d8045ac1e88c6717215
a2/57a7c7cac26c391e8636193ff47b45c5e587ec
73/f2af84ba8ed27fa332d52745274377aa67cda5
次の単一のコマンドを使用します。
% mmmv '??*' '#1#2/#3'
これを行うには、mmmv
必要に応じて2文字の名前のサブディレクトリを作成できる必要があります。 )
答え1
一般に、ユーティリティがこれを実行しない理由は予期しないことであり、そうするとセキュリティリスクが発生する可能性があるためです。
/foo
たとえば、モード700
()を使用してプライベートと見なされるディレクトリがあるとしますrwx------
。存在するtouch /foo/bar
が/foo
存在しない場合は、デフォルト値755
(rwxr-xr-x
)を使用して生成します。ただし、/foo
非公開である必要があり、通常は非公開で/foo
作成され設定されたすべての項目はそうしません。先ほど生成されたものが分からないので/foo
調整しなければならないことがわかりません。