A resposta correta e completa é:
Para modificar o tempo de acesso apenas com o comando " touch ", você deve usar o parâmetro " -a ", caso contrário o comando modificará o tempo de modificação também. Por exemplo, para adicionar 3 horas:
touch -a -r test_file -d '+3 hour' test_file
From man touch:
Update the access and modification times of each FILE to the current time.
-a change only the access time
-r, --reference=FILE use this files times instead of current time.
-d, --date=STRING parse STRING and use it instead of current time
Assim, o arquivo terá tempo de acesso igual ao tempo de acesso antigo mais 3 horas. E o tempo de modificação permanecerá o mesmo. Você pode verificar isso com:
stat test_file
Finalmente, para modificar o tempo de acesso apenas para um diretório inteiro e seus arquivos e subdiretórios, você pode usar o comando " find " para percorrer o diretório e usar " -exec "parâmetro para executar" toque "em cada arquivo e diretório (apenas não filtre a pesquisa com o argumento" - tipo f ", isso não afetará os diretórios) .
find dir_test -exec touch -a -r '{}' -d '+3 hours' '{}' \;
From man find:
-type c File is of type c:
d directory
f regular file
and for -exec:
-exec command ;
Execute command; true if 0 status is returned. All following arguments to find are taken to be arguments to the command until an argument consisting of ';' is encoun-
tered. The string '{}' is replaced by the current file name being processed everywhere it occurs in the arguments to the command, not just in arguments where it is alone,
as in some versions of find. Both of these constructions might need to be escaped (with a '\') or quoted to protect them from expansion by the shell. See the EXAMPLES
section for examples of the use of the -exec option. The specified command is run once for each matched file. The command is executed in the starting directory. There
are unavoidable security problems surrounding use of the -exec action; you should use the -execdir option instead.
Just remember enclose the braces in single quote marks to protect them from interpretation as shell script punctuation. The semicolon is similarly protected by the use of a backslash, though single quotes could have been used in that case also.
Finalmente, para usá-lo em um script de shell como "yaegashi" disse:
#!/bin/sh
for i in "$@"; do
find "$i" -exec touch -a -r '{}' -d '+3 hours' '{}' \;
done
E corra como "yaegashi", disse:
./script.sh /path/to/dir1 /path/to/dir2
Ele pesquisará todos os diretórios dentro de dir1 e dir2 e alterará apenas o tempo de acesso para todos os arquivos e subdiretórios.