Existem muitos comandos Unix que falharão a menos que algum subdiretório já exista, mesmo que seja trivial para tais comandos ir em frente e criar o subdiretório faltando antes de prosseguir.
Por exemplo, 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
Da mesma forma, 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
Uma exceção notável a esse comportamento é mkdir
, cujo -p
sinalizador diz para "criar subdiretórios conforme necessário".
Estou um pouco confuso com o fato de que touch
, mv
et al. não fará a "coisa óbvia", seja por padrão, ou mediante solicitação através de algum sinalizador (como mkdir
's -p
).
Eu acho que deve haver uma boa razão para isso, mas não é óbvio para mim. Insights são bem-vindos.
(A motivação para perguntar isso é que eu gostaria de implementar um utilitário que é bem parecido com o utilitário (não padrão) mmv
, exceto que, ao contrário do mmv
real, <<> / em> "criar subdiretórios conforme necessário", e estou querendo saber se esse novo recurso seria uma idéia realmente ruim.
Por exemplo, com o utilitário em que estou pensando - deixe-me chamá-lo de mmmv
- um seria capaz de mover e renomear os arquivos simultaneamente
1caf73ee55b4e11d6e3b12ccbf8c477c2839bfae
1f37fd8ce865f98579d10d8045ac1e88c6717215
73f2af84ba8ed27fa332d52745274377aa67cda5
a257a7c7cac26c391e8636193ff47b45c5e587ec
para
1c/af73ee55b4e11d6e3b12ccbf8c477c2839bfae
1f/37fd8ce865f98579d10d8045ac1e88c6717215
a2/57a7c7cac26c391e8636193ff47b45c5e587ec
73/f2af84ba8ed27fa332d52745274377aa67cda5
com um único comando, assim:
% mmmv '??*' '#1#2/#3'
Para que isso seja possível, mmmv
precisa ser capaz de criar os subdiretórios de duas letras, conforme necessário.