Alterar arquivo (fotos, vídeos) Timestamp do nome do arquivo -- file-system campo com file-transfer campo com file-management campo com media-files campo com bash camp android Relacionado O problema

Change file (pictures, videos) timestamp from filename


0
vote

problema

português

Ao mover arquivos em torno de DIP DIFERENTE DIFT e através do PC / Smartphone, o Timestamp para a data da última modificação geralmente é redefinido para o muito datetime de operação de movimento / cópia. Isso leva a arquivos não cronologicamente classificados em alguns aplicativos (galeria), bastante irritante, especialmente para imagens e vídeos.

Normalmente, esses tipos de arquivos segue a convenção de nomenclatura do img_yyyymmdd_hhmmss.jpg para imagens e vid_yyyymmdd_hhmmss.mp4 para vídeos. Então pensei em combinar touch e extrair o caractere dos nomes de registro, o registro de data e hora em vigor parte do próprio nome do arquivo.

Eu encontrei este script em HQ de Efestione < / a> for i in IMG*.jpg; do busybox touch -t ${i:4:8}${i:13:4}.${i:17:2} $i; done mas funciona apenas no terminal. Eu tentei fazer um script fora, mas não funciona (veja abaixo)

  #!/system/bin/sh #change timestamp for images filename IMG_YYYYMMDD_HHMMSS.jpg  for i in IMG_*.jpg do     touch -t ${i:4:8}${i:13:4}.${i:17:2} $i done  #change timestamp for whatsapp images IMG-YYYYMMDD-WAnnnn.jpg for i in IMG-*WA*.jpg do     touch -t ${i:4:8}1234 $i done  #change timestamp for videos filename VID_YYYYMMDD_HHMMSS.mp4 for i in VID_*.jpg do     touch -t ${i:4:8}${i:13:4}.${i:17:2} $i done  #change timestamp for whatsapp videos IMG-YYYYMMDD-WAnnnn.mp4 for i in VID-*WA*.mp4 do     touch -t ${i:4:8}1234 $i done    

Idealmente gostaria de colocar um script como este no diretório DCIM ou imagens de nível superior e ter processado todas as imagens e vídeos nos subdirs. Claro que estou enraizado.

english

When moving files around tru different dirs and across PC / smartphone, timestamp for last modified date usually get reset to the very datetime of move / copy operation. This lead to files being non-chronologically sorted in some apps (Gallery), quite annoying especially for Images and Videos.

Usually these kind of files follows the naming convention of IMG_YYYYMMDD_HHMMSS.jpg for Images and VID_YYYYMMDD_HHMMSS.mp4 for Videos. So I thought about combining touch and extracting character from filenames, the timestamp being in effect part of the filename itself.

I found this script at Ephestione's HQ for i in IMG*.jpg; do busybox touch -t ${i:4:8}${i:13:4}.${i:17:2} $i; done but works in terminal only. I tried to make a script out of it but it doesn't work (see below)

#!/system/bin/sh #change timestamp for images filename IMG_YYYYMMDD_HHMMSS.jpg  for i in IMG_*.jpg do     touch -t ${i:4:8}${i:13:4}.${i:17:2} $i done  #change timestamp for whatsapp images IMG-YYYYMMDD-WAnnnn.jpg for i in IMG-*WA*.jpg do     touch -t ${i:4:8}1234 $i done  #change timestamp for videos filename VID_YYYYMMDD_HHMMSS.mp4 for i in VID_*.jpg do     touch -t ${i:4:8}${i:13:4}.${i:17:2} $i done  #change timestamp for whatsapp videos IMG-YYYYMMDD-WAnnnn.mp4 for i in VID-*WA*.mp4 do     touch -t ${i:4:8}1234 $i done 

Ideally I'd like to put a script like this in the top level DCIM or Pictures directory and have it process all the Images and Videos in the subdirs. Of course I'm rooted.

              

Lista de respostas

1
 
vote
vote
Melhor resposta
 

Remover do script o .${i:17:2} para loop.

Deve ser:

  #!/system/bin/sh #change timestamp for images filename IMG_YYYYMMDD_HHMMSS.jpg  for i in IMG_*.jpg do     touch -t ${i:4:8}${i:13:4} $i done  #change timestamp for whatsapp images IMG-YYYYMMDD-WAnnnn.jpg for i in IMG-*WA*.jpg do     touch -t ${i:4:8}1234 $i done  #change timestamp for videos filename VID_YYYYMMDD_HHMMSS.mp4 for i in VID_*.jpg do     touch -t ${i:4:8}${i:13:4} $i done  #change timestamp for whatsapp videos IMG-YYYYMMDD-WAnnnn.mp4 for i in VID-*WA*.mp4 do     touch -t ${i:4:8}1234 $i done    

Observe que as imagens e vídeos do Whatsapp de acordo com o seu script têm o mesmo tempo 12:34.

editar: para também passar por subdiretórios, altere os loops para a seguinte:

   for i in `find . -type f -name "IMG_*..jpg"` do  j=`basename $i`   echo $j  touch -t ${j:4:8}${j:13:4} $i   done     

Explicação:

Encontre. -TYPE FNAME " .mp5" `: Encontre arquivos (-type t) cujos nomes contém" IMG _ .jpg "(-Name" IMG _ *. JPG ") no diretório atual (.) e subdiretórios.

j = basename $i : Obtenha o nome do arquivo (não o caminho inteiro) e atribua-o a J.

toque -t $ {j: 4: 8} $ {J: 13: 4} $ i: altera o tempo de modificação do arquivo com base na data e hora recuperada de $ {J: 4: 8} $ {j: 13: 4}.

 

Remove from the script the .${i:17:2} in for loop.

It should be:

#!/system/bin/sh #change timestamp for images filename IMG_YYYYMMDD_HHMMSS.jpg  for i in IMG_*.jpg do     touch -t ${i:4:8}${i:13:4} $i done  #change timestamp for whatsapp images IMG-YYYYMMDD-WAnnnn.jpg for i in IMG-*WA*.jpg do     touch -t ${i:4:8}1234 $i done  #change timestamp for videos filename VID_YYYYMMDD_HHMMSS.mp4 for i in VID_*.jpg do     touch -t ${i:4:8}${i:13:4} $i done  #change timestamp for whatsapp videos IMG-YYYYMMDD-WAnnnn.mp4 for i in VID-*WA*.mp4 do     touch -t ${i:4:8}1234 $i done 

Note that the images and videos from WhatsApp according to your script have the same time 12:34.

Edit: To also go through subdirectories, change the for loops as followed:

 for i in `find . -type f -name "IMG_*..jpg"` do  j=`basename $i`   echo $j  touch -t ${j:4:8}${j:13:4} $i   done  

Explanation:

find . -type f -name ".mp5"`: find files ( -type t) whose names contains " IMG_.jpg" ( -name "IMG_*.jpg") in the current directory ( . ) and subdirectories.

j= basename $i : Get the filename (not the entire path), and assign it to j.

touch -t ${j:4:8}${j:13:4} $i : Change the file's modification time based on the date and time retrieved from ${j:4:8}${j:13:4} .

 
 
       
       

Perguntas relacionadas

0  Alterar arquivo (fotos, vídeos) Timestamp do nome do arquivo  ( Change file pictures videos timestamp from filename ) 
Ao mover arquivos em torno de DIP DIFERENTE DIFT e através do PC / Smartphone, o Timestamp para a data da última modificação geralmente é redefinido para o mu...

24  É possível ativar a configuração do Android "USB Tethering" da linha de comando?  ( Is it possible to activate the usb tethering android setting from the command ) 
Eu gostaria de ativar "USB Tethering" de dentro de um script bash, por isso há alguma possibilidade de executar uma linha de comando com adb shell para alte...

0  Addon.d Bash Script para remover APKS após refluxo noturno no Android 5.1 cm12.1 não funciona  ( Addon d bash script for removing apks after nightly reflash on android 5 1 cm12 ) 
Estou tentando ter um script bash em /system/addon.d/ que remove APKs indesejadas de um Android 5.1 (CM12.1) para o meu telefone Galaxy Nexus. Cada novo refla...

1  Como modificar o prompt de Bash Shell em CyanogenMod?  ( How to modify bash shell prompt in cyanogenmod ) 
Alguém já teve sucesso modificando o prompt do shell em CyanogenMod? Atualmente, # é muito inútil, seria muito melhor, pelo menos exibir o diretório de trabal...

1  Bash-shell no tablet Android (Transformer Pad TF701T)  ( Bash shell on android tablet transformer pad tf701t ) 
Existe alguma maneira de obter uma concha de bash totalmente trabalhadora no Android juntamente com um emulador de terminal, que suporta um teclado de hardwar...

1  Terminal de bash em comprimidos  ( Bash terminal on tablets ) 
Eu gostaria de comprar um tablet e usá-lo como um netbook para funcionar usando um dock de teclado (ainda gosto das opções de tela sensível ao toque e caneta ...

4  É possível iniciar uma sessão FTP via Bash?  ( Is it possible to start an ftp session via bash ) 
É possível iniciar uma sessão com um smartphone do Android Samsung Galaxy através de um shell bash para acessar arquivos remotamente? ...

8  Executando aplicativos de um emulador de terminal [fechado]  ( Running applications from a terminal emulator ) 
. FECHADO. Esta questão é off-tópico . Atualmente não está aceitando respostas. Quer melh...

11  Como definir Bash como Shell padrão?  ( How to set bash as default shell ) 
Quando eu ADB em um dispositivo com CyanogenMod, sou apresentado com um bom shell bash, prompt de cores e Bashrc. Eu não vejo um symlink de / system / xbin / ...

5  Bash - Como posso verificar se um computador existe na minha rede sem ip (i.e. por nome do dispositivo)?  ( Bash how can i check if a computer exists on my network without ip i e by de ) 
Eu gostaria que meu telefone executasse certos scripts de shell via Tasker se meu telefone estiver na mesma rede WiFi como meu laptop. Minha ideia inicial é e...




© 2022 pergunte.org All Rights Reserved. Casa de perguntas e respostas todos os direitos reservados


Licensed under cc by-sa 3.0 with attribution required.