Eu queria saber se alguém sabe como alterar os carimbos de data / hora das pastas recursivamente com base no carimbo de data e hora mais recente encontrado nos arquivos dessa pasta.
Então, por exemplo:
jon @ UbuntuPanther: / media / media / MP3s / Foo Fighters / (1997-05-20) A cor e a forma $ ls -alF 55220 total drwxr-xr-x 2 jon jon 4096 30-08-2010 12:34 ./ drwxr-xr-x 11 jon jon 4096 30-08-2010 12:34 ../ -rw-r - r-- 1 jon jon 1694044 2010-04-18 00:51 Foo Fighters - Doll.mp3 -rw-r - r-- 1 jon jon 3151170 2010-04-18 00:51 Foo Fighters - Enough Space.mp3 -rw-r - r-- 1 jon jon 5004289 2010-04-18 00:52 Foo Fighters - Everlong.mp3 -rw-r - r-- 1 jon jon 5803125 2010-04-18 00:51 Foo Fighters - fevereiro Stars.mp3 -rw-r - r-- 1 jon jon 4994903 2010-04-18 00:51 Foo Fighters - Hey, Johnny Park! .mp3 -rw-r - r-- 1 jon jon 4649556 2010-04-18 00:52 Foo Fighters - Monkey Wrench.mp3 -rw-r - r-- 1 jon jon 5216923 2010-04-18 00:51 Foo Fighters - My Hero.mp3 -rw-r - r-- 1 jon jon 4294291 2010-04-18 00:52 Foo Fighters - My Poor Brain.mp3 -rw-r - r-- 1 jon jon 6778011 2010-04-18 00:52 Foo Fighters - New Way Home.mp3 -rw-r - r-- 1 jon jon 2956287 2010-04-18 00:51 Foo Fighters - See You.mp3 -rw-r - r-- 1 jon jon 2730072 2010-04-18 00:51 Foo Fighters - Up in Arms.mp3 -rw-r - r-- 1 jon jon 6086821 2010-04-18 00:51 Foo Fighters - Walking After You.mp3 -rw-r - r-- 1 jon jon 3033660 2010-04-18 00:52 Foo Fighters - Wind Up.mp3
A pasta "(20/05/1997), A Cor e a Forma", teria seu carimbo de data e hora definido para 18/04/2010 00:52.
fonte
/media/media/MP3s
? Então, em zsh:for d in /media/media/MP3s/**/*(/); do touch -r $d/*(Dom[1]) $d; done
. Sem o zsh (mas, na verdade, use o zsh, é mais simples): coloque o comando em um script e executefind /media/media/MP3s -type d -execdir /path/to/the/script \;
.for d in ...
como pode adaptar o seguinte, também funcionará com pastas que contêm espaços? (que ainda está faltando na minha solução)Isso não é "recursivamente", apenas altera todos os carimbos de data e hora em uma pasta. Se é isso que você quer dizer, há duas etapas.
stat -c '%Y' filename
irá imprimir o timestamp defilename
estat -c '%Y %n' *
saída será a hora eo nome do arquivo de cada arquivo na pasta, então isso vai encontrar o nome do arquivo mais recentemente modificado na pasta atual:Pensando bem, há uma maneira mais fácil de obter o carimbo de data / hora mais alto na pasta:
Então você deseja alterar todos os arquivos na pasta para ter o mesmo carimbo de data e hora desse arquivo.
touch -r foo bar
mudarábar
para ter o mesmo carimbo de data / hora modificado quefoo
, portanto, todos os arquivos da pasta mudarão para o mesmo carimbo de data / hora modificado que o arquivo modificado mais recentemente:Portanto, o one-liner é:
fonte
ls
manipular nomes de arquivos contendo caracteres não ASCII. Se você quiser one-liners, use zsh :-)Eu montei o trabalho e agora:
Este seria um script que altera todos os diretórios internos
/tmp/test/
para o registro de data e hora do arquivo mais recente dentro de cada diretório:você pode adicionar alguns arquivos de teste em / tmp assim:
fonte
"
novo, primeiro parece que está faltando, mas funciona.Apenas use
fonte
Eu uso esse script para definir recursivamente os carimbos de data e hora da pasta para o conteúdo mais recente. (É muito semelhante à resposta de Gilles):
fonte
Peguei o comando zG do @Gilles e o aprimorei para trabalhar em subpastas, mas parece que o zsh é terrivelmente ineficiente para a parte ** / * (FDod).
As aspas permitem que as entradas do diretório que contêm espaços e guias funcionem corretamente. O FD faz com que ele encontre diretórios não vazios, incluindo os que começam com., O od faz com que seja pesquisado da maneira mais profunda , para que os registros de data e hora da pasta pai sejam atualizados corretamente.
Ao testar, notei que o desempenho e a pegada de memória para ** / * (FDod) eram insanos (mais de 1,4 GB para apenas pastas de 650k) e liam todo o conteúdo antes de começar a tocar nas pastas. Depois de substituí-lo por localizar / ler, ficou muito mais rápido, não queimava memória e começou quase imediatamente.
Se você não o estiver executando em um script, substitua "$ @" pelas pastas das quais deseja executá-lo.
fonte
Eu realmente não gostei da obscuridade dos comandos do shell e fiz isso rapidamente em python.
Ele define recursivamente todos os mtimes do diretório para o mais novo arquivo não excluído / dir mtime.
fonte