Como posso alterar a data de modificação de uma pasta para o último arquivo alterado dentro? [duplicado]

4

No meu diretório do media center, todos os horários modificados de minhas pastas não são, de alguma forma, a data desejada.

Como posso alterar todos os horários modificados das pastas principais para o horário modificado do mais novo arquivo de mídia dentro de cada pasta?

por exemplo:

cd /tmp
mkdir test
cd test
mkdir d1
mkdir d2
touch d1/text1.txt
touch d1/movie1.mov
touch d2/text2.txt
touch d2/movie2.mov
touch notthis.file

agora eu tentei:

ls -td *| head -n 1

mas isso dá:

notthis.file
    
por rubo77 14.08.2013 / 11:12

3 respostas

4

com zsh :

cd that-dir &&
  touch -r *(D.om[1]) .

Se você quiser considerar arquivos em subdiretórios também:

touch -r **/*(D.om[1]) .

E se você quiser fazer isso em todos os diretórios:

for d (**/*(D/)) touch -r $d/*(D.om[1]) -- $d
    
por 14.08.2013 / 11:42
2

Usando ls(1) para pedir um diretório por hora de modificação, head(1) para obter o primeiro dos arquivos e touch(1) para alterar o horário de modificação do seu diretório de destino, é muito fácil.

Normalmente, não é aconselhável analisar a saída de ls , já que raramente é necessário e fácil ser capturado em caracteres especiais, no entanto, neste caso, não consigo pensar em outra ferramenta que forneça o arquivo com facilidade o último registro de data e hora em um diretório.

touch_dir() {
    dir="$1"
    touch --reference="$(ls -td "${dir}"/* | head -n 1)" "${dir}"
}

Execute isso com um argumento que seja um diretório e defina o horário de modificação do diretório para a hora da última modificação de qualquer arquivo no diretório.

Ele falhará se não houver arquivos no diretório (fácil de testar de várias maneiras) ou se o nome de arquivo mais recente tiver uma nova linha incorporada - head só obterá a peça antes da nova linha.

Para atualizar muitos diretórios, basta executá-lo em um loop.

    
por 14.08.2013 / 11:37
1

Você pode definir o registro de data e hora de um diretório your_dir como o de seu arquivo modificado mais recentemente com essa monstruosidade:

touch -t 'ls -ltr --time-style='+%Y%m%d%H%M.%S your_dir' | grep '^-' | tail -1 | awk '{print $6}'' your_dir

Não está claro o que você quer dizer com "pastas principais", então não incluímos nenhuma recursão.

    
por 14.08.2013 / 11:33