Como posso converter nomes de pastas de um formato de data para outro -- rename campo com date camp askubuntu Relacionado O problema

How can I batch convert folder names from one date format to another


10
vote

problema

português

Eu tenho um grande número de pastas, nomeado como datas como assim:

  10 Aug 2010  15 Sep 2010  20 Jun 2010  25 Jul 2010  6 Nov 2010 10 Sep 2010  16 Aug 2010  20 Mar 2010  26 Aug 2010  6 Oct 2010 11 Apr 2010  16 Jun 2010  21 Jun 2010  28 Aug 2010  7 Apr 2010 12 Aug 2010  16 Oct 2010  21 Mar 2010  28 Feb 2010  7 Aug 2010 13 May 2010  17 Apr 2010  22 Feb 2010  28 Jun 2010  7 Jun 2010 14 Aug 2010  17 Aug 2010  23 Jul 2010  28 Mar 2010  8 Apr 2010 14 Jun 2010  18 Aug 2010  24 Jul 2010  29 Mar 2010  8 Aug 2010 15 Aug 2010  19 Aug 2010  24 Nov 2010  30 Aug 2010  8 Jul 2010 15 Jul 2010  4 Apr 2010  25 Apr 2010  6 May 2010   8 Sep 2010    

Eu quero o formato de data para alterar para isso:

  2010-04-04  2010-05-03 2010-06-06  2010-07-02 2010-07-05  2010-09-01 2010-09-04  2010-09-05 2010-11-01    

Como posso lotes renomear um monte de pastas de DD MMM YYYY para YYYY-MM-DD ?

english

I have a large number of folders, named as dates like so:

10 Aug 2010  15 Sep 2010  20 Jun 2010  25 Jul 2010  6 Nov 2010 10 Sep 2010  16 Aug 2010  20 Mar 2010  26 Aug 2010  6 Oct 2010 11 Apr 2010  16 Jun 2010  21 Jun 2010  28 Aug 2010  7 Apr 2010 12 Aug 2010  16 Oct 2010  21 Mar 2010  28 Feb 2010  7 Aug 2010 13 May 2010  17 Apr 2010  22 Feb 2010  28 Jun 2010  7 Jun 2010 14 Aug 2010  17 Aug 2010  23 Jul 2010  28 Mar 2010  8 Apr 2010 14 Jun 2010  18 Aug 2010  24 Jul 2010  29 Mar 2010  8 Aug 2010 15 Aug 2010  19 Aug 2010  24 Nov 2010  30 Aug 2010  8 Jul 2010 15 Jul 2010  4 Apr 2010  25 Apr 2010  6 May 2010   8 Sep 2010 

I want the date format to change to this:

2010-04-04  2010-05-03 2010-06-06  2010-07-02 2010-07-05  2010-09-01 2010-09-04  2010-09-05 2010-11-01 

How can I batch rename a lot of folders from DD MMM YYYY to YYYY-MM-DD?

     

Lista de respostas

12
 
vote

Um pouco para a minha própria surpresa, parece com o nosso velho amigo prename (a.k.a rename em alguns sistemas) pode fazer isso - com um pouco de wrangling:

  sudo apt-get install htop0   

Alternativamente, usando o GNU sudo apt-get install htop1

  sudo apt-get install htop2   

Teste com um ABCDEFGHIJKLMNABCDEFGHIJKLMN13 (Equivalente ao Nome do Prename ABCDEFGHIJKLMNABCDEFGHIJKLMN14 Flag):

  sudo apt-get install htop5   

Observe que a análise das datas pode ser dependente de localização.

 

Somewhat to my own surprise, it looks like our old friend prename (a.k.a rename on some systems) can do that - with a little wrangling:

$ prename -vn -- '   BEGIN{use Time::Piece};   s/\d+ \w+ \d+/Time::Piece->strptime($&, "%d %b %Y")->strftime("%Y-%m-%d")/e ' * 10 Aug 2010 renamed as 2010-08-10 8 Sep 2010 renamed as 2010-09-08 

Alternatively, using GNU date

dirs=( ?\ ???\ ???? ??\ ???\ ???? ) # matches D MMM YYYY and DD MMM YYYY  for d in "${dirs[@]}"; do mv -v -- "$d" "$(date '+%Y-%m-%d' -d "$d")"; done 

Testing with an echo (equivalent to prename's -n flag):

$ for d in "${dirs[@]}"; do echo mv -v -- "$d" "$(date '+%Y-%m-%d' -d "$d")"; done mv -v -- 8 Sep 2010 2010-09-08 mv -v -- 10 Aug 2010 2010-08-10 

Note that parsing of dates can be locale dependent.

 
 
9
 
vote

O comando GNU ABCDEFGHIJKLMNABCDEFGHIJKLMN16 é muito bom em converter entre diferentes formatos de data. Por exemplo:

  sudo apt-get install htop7   

Com isso em mente, se as únicas coisas em seu diretório de destino são os subdiretórios que você deseja renomear, você pode simplesmente fazer:

  sudo apt-get install htop8   

Se você quiser especificar diretórios apenas , use:

  sudo apt-get install htop9   

e para combinar apenas diretórios cujo nome começa com um número:

  htop0   
 

The GNU date command is very good at converting between different date formats. For example:

$ date -d '17 Aug 2010' +%F 2010-08-17 

With that in mind, if the only things in your target directory are the subdirectories you want to rename, you can simply do:

for d in *; do mv "$d" "$(date -d "$d" +%F)"; done 

If you want to specify directories only, use:

for dir in */; do d=${dir%%/}; mv "$d" "$(date -d "$d" +%F)"; done 

And to match only directories whose name starts with a number:

for dir in [0-9]*/; do d=${dir%%/}; mv "$d" "$(date -d "$d" +%F)"; done 
 
 
6
 
vote

Aqui está um script Python que pode fazer a renomeação usando o módulo abcdefghgjklmnabcdefghijklmn0 :

  #!/usr/bin/env python  from datetime import datetime import os import os.path import sys   def main(target):     dir_path = os.path.abspath(target)     for i in os.listdir(target):         old_name = os.path.join(dir_path, i)         d = datetime.strptime(i, '%d %b %Y').strftime('%Y-%m-%d')         new_name = os.path.join(dir_path, d)         os.rename(old_name, new_name)  if __name__ == '__main__':     main(sys.argv[1])    

Vamos chamar o script rename.py . Para usar o script, primeiro torná-lo executável executável em execução chmod +x rename.py e, em seguida, executando ./rename.py parent_dir onde parent_dir é o diretório pai contendo todos os diretórios cujos nomes você quer mudar.

 

Here is a Python script that can do the renaming using the datetime module:

#!/usr/bin/env python  from datetime import datetime import os import os.path import sys   def main(target):     dir_path = os.path.abspath(target)     for i in os.listdir(target):         old_name = os.path.join(dir_path, i)         d = datetime.strptime(i, '%d %b %Y').strftime('%Y-%m-%d')         new_name = os.path.join(dir_path, d)         os.rename(old_name, new_name)  if __name__ == '__main__':     main(sys.argv[1]) 

Let's call the script rename.py. To use the script, first make it executable by running chmod +x rename.py and then running ./rename.py parent_dir where parent_dir is the parent directory containing all the directories whose names you want to change.

 
 
4
 
vote

Aqui está um script de rubi que faz isso mesmo. Coloque isso no diretório onde todo esse diretório reside.

  #!/usr/bin/env ruby  require 'time'  Dir.glob('*').select do |f|     if File.directory? f         time = Time.parse(f.to_s)         File.rename(f, time.strftime("%Y-%m-%d"))     end end    

Use chmod +x rename.rb e ./rename.rb para renomear os diretórios

 

Here is a Ruby script that does this same thing. Put this into the directory where all those directory resides.

#!/usr/bin/env ruby  require 'time'  Dir.glob('*').select do |f|     if File.directory? f         time = Time.parse(f.to_s)         File.rename(f, time.strftime("%Y-%m-%d"))     end end 

Use chmod +x rename.rb and ./rename.rb to rename the directories

 
 
0
 
vote

Se você quiser uma boa solução GUI, tente Pyrenamer fácil e muito configurável

 

if you want a good GUI solution try pyrenamer easy and very configurable

 
 

Perguntas relacionadas

1  16.04 LTS Data Format in Browser e Apps  ( 16 04 lts date format in browser and apps ) 
Desculpe se estou fazendo uma pergunta obsoleta, não encontrei nenhuma solução até agora. A data é exibida como mm / dd / aaaa com 12 horas no navegador Tipo...

2  Como fazer novo arquivo com data nele?  ( How to make new file with date in it ) 
Eu posso criar um novo arquivo e colocar a data nela. touch example.txt date >> example.txt Mas devo criar o arquivo com a data no momento em que criei...

1  Corrigir ou redefinir "data e hora automática" no Ubuntu 18.10 no XPS 9570 laptop  ( Fix or reset automatic date time in ubuntu 18 10 on xps 9570 laptop ) 
Eu tenho um problema onde a data e a hora estão erradas quando uso a data e o amplificador automáticos; Tempo em configurações para definir a hora da Internet...

0  Como alterar a data da pasta base  ( How to change base folder date ) 
Eu tenho uma unidade de backup e mantenho sete backups rolantes nos últimos sete dias usando dias da semana dentro de um script bash. dia-1 / home / usernam...

27  Como alterar o formato de data? [duplicado]  ( How to change the date format ) 
. Esta pergunta já tem uma resposta aqui : Como ajustar o formato do indicador do relógio? ...

130  Como posso exibir a configuração atual da hora e data?  ( How can i display the current time date setting ) 
Como posso exibir a configuração de hora atual, como o fuso horário, no Ubuntu? ...

0  Classificando fotos por nome-coluna "Data de registro" com Nautilus  ( Sorting pictures by name column record date with nautilus ) 
Eu uso o Ubuntu 12.04 lts alguns dias agora e eu gosto de tirar fotos :-). Até agora, eu carrego todas as minhas fotos no meu sistema Ubuntu (aproximadamente ...

3  Não é possível coordenar o tempo correto entre o sistema e o rtcwake  ( Cant coordinate the correct time between system and rtcwake ) 
O objetivo final é ter meu sistema desligado no final de um script e acordar em um horário definido no dia seguinte. Estou usando rtcwake para fazer isso, a...

75  Como posso alterar a data e a hora no Ubuntu?  ( How can i change the date and time on ubuntu ) 
Quando eu for alterado a data e a hora, não funciona. Eu tento desbloquear, mas simplesmente não vai desbloquear. Se houver alguma maneira de fazer isso funci...

1  Configurando o formato de data em Menubar em cima da área de trabalho  ( Setting date format in menubar on top of desktop ) 
Como faço para alterar o formato? Quando eu abrir "Tempo & Amp; Configurações de data", encontro possibilidades muito limitadas. Então, há algum arquivo que d...




© 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.