touch、mvなどが「必要に応じて」サブディレクトリを生成しない理由について

touch、mvなどが「必要に応じて」サブディレクトリを生成しない理由について

一部のサブディレクトリがすでに存在しない場合、多くの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

touchmv、、et alという事実は少し混乱しています。デフォルトでは、または特定のフラグ(mkdirs-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存在しない場合は、デフォルト値755rwxr-xr-x)を使用して生成します。ただし、/foo非公開である必要があり、通常は非公開で/foo作成され設定されたすべての項目はそうしません。先ほど生成されたものが分からないので/foo調整しなければならないことがわかりません。

おすすめ記事