Sobre por qué touch, mv, etc. no crean subdirectorios "según sea necesario"

Sobre por qué touch, mv, etc. no crean subdirectorios "según sea necesario"

Hay muchos comandos de Unix que fallarán a menos que ya exista algún subdirectorio, aunque sería una cuestión trivial que dichos comandos siguieran adelante y crearan el subdirectorio que falta antes de continuar.

Por ejemplo, para 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

De manera similar, para 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

Una excepción notable a este comportamiento es mkdirél mismo, cuyo -pindicador le indica que "cree subdirectorios según sea necesario".

Estoy un poco desconcertado por el hecho de que touch, mv, et al. no hará lo "obvio", ya sea de forma predeterminada o previa solicitud a través de algún indicador (como mkdir's -p).

Supongo que debe haber una muy buena razón para esto, pero no es obvia para mí. Se aceptan ideas.

(La motivación para preguntar esto es que me gustaría implementar una utilidad que sea muy parecida a la mmvutilidad (no estándar), excepto que, al contrario de lo real mmv,haría"crear subdirectorios según sea necesario" y me pregunto si esta nueva característica sería una idea realmente mala.

Por ejemplo, con la utilidad en la que estoy pensando (déjame llamarla mmmv) uno podría mover y cambiar el nombre de los archivos simultáneamente.

1caf73ee55b4e11d6e3b12ccbf8c477c2839bfae
1f37fd8ce865f98579d10d8045ac1e88c6717215
73f2af84ba8ed27fa332d52745274377aa67cda5
a257a7c7cac26c391e8636193ff47b45c5e587ec

a

1c/af73ee55b4e11d6e3b12ccbf8c477c2839bfae
1f/37fd8ce865f98579d10d8045ac1e88c6717215
a2/57a7c7cac26c391e8636193ff47b45c5e587ec
73/f2af84ba8ed27fa332d52745274377aa67cda5

con un solo comando, como este:

% mmmv '??*' '#1#2/#3'

Para que esto sea posible, mmmves necesario poder crear subdirectorios con nombres de dos letras según sea necesario).

Respuesta1

Generalmente, la razón por la que las empresas de servicios públicos no hacen esto es porque no es lo esperado y hacerlo puede tener implicaciones de seguridad.

Por ejemplo, digamos que tiene un directorio que se supone es privado, /foocon modo 700( rwx------). Si existe touch /foo/bary /foono existe, lo creará, potencialmente con un valor predeterminado de 755( rwxr-xr-x). Pero /foose suponía que era privado, y lo que normalmente lo crea /fooy lo hace privado no lo hará. Y como no sabe que /foose acaba de crear, no sabe que debe ajustarlo.

información relacionada