Esta questão tem paralelos com a questão " toque em todas as pastas em um diretório ".
Como touch
tudo em um diretório,
- recursivamente
- incluindo entradas ocultas, como "directory up"
..
e.
- sem desreferenciar links simbólicos
touch -h
e use um arquivo de referência
touch -r <file>
como a fonte do carimbo de data/horade dentro de um script de shell ?
Se o seu comando
touch
não suportar nenhuma referência :-h
(observe que isso
-h
implica-c
(para evitar a criação do arquivo se ele não existisse com NetBSD/FreeBSD, mas não com GNU ou busyboxtouch
(embora com GNUtouch
também não criaria arquivos e imprimiria uma mensagem de erro), adicionando-c
aqui para aumentar portabilidade).Ou com um único
find
comando que pode reduzir o número detouch
comandos sendo executados:Ou seja, adicione
..
à lista de arquivos fornecida afind
, mas digafind
para cortá -la (não descer nela).Para um diretório arbitrário (bem, um cujo caminho não começa com
-
:(aqui usando
$dir/
em vez de$dir
para o caso em que$dir
se refere a um link simbólico para um diretório).Com o BSD
find
, você pode usarpara evitar os problemas de
$dir
começar com-
.Embora você também possa fazer:
(supondo que
$reference_file
não seja um caminho relativo).Observe que se
$reference_file
for um link simbólico, com GNUtouch
e com-h
, será usado o horário de modificação do link simbólico (o do destino seria usado sem-h
) enquanto com NetBSD ( de onde-h
vem ) e FreeBSDtouch
, o horário de modificação do destino é usado com ou sem-h
.Se estiver usando
zsh
, você pode usar seu globbing recursivo(o
oN
de não classificação da lista pode ser omitido, é apenas para otimização).O ksh93 acabou adicionando suporte para o globbing recursivo do zsh em 2005, com a
globstar
opção.Observe, no entanto, que
ksh
incluirá todas as entradas.
e..
aqui, portanto, todos os diretórios serão tocados várias vezes.O bash acabou copiando o ksh93
globstar
em 2009, mas foi inicialmente / quebrado / porque seguia links simbólicos ao descer os diretórios. Foi corrigido em 4.3 em 2014.bash não tem o equivalente a zsh's
zargs
ouksh93
'scommand -x
para dividir as linhas de comando, a fim de evitar problemas muito longos na lista de argumentos . Em um sistema GNU, você sempre pode usar o GNUxargs
para isso:Agora, eu provavelmente ainda usaria
find
aqui. Além do desempenho inferior, outro problema com globs é que erros (como acesso negado) ao percorrer a árvore de diretórios são silenciosamente ignorados.