precisa mover os arquivos para uma pasta diferente com base na data de criação [duplicada]

5

Eu configurei arquivos criados de segunda a sexta-feira.

a -- > 08/20
a1---> 08/21
a2---> 08/21
a3---> 08/21
a4---> 08/22
a5 --> 08/23

Eu preciso mover apenas o arquivo 08/21 para a pasta diffrenet.

Como isso é possível?

    
por user43067 28.08.2013 / 13:14

3 respostas

10

Vamos supor que os tempos de modificação dos arquivos sejam mantidos (os arquivos não são modificados depois de criados). Em seguida, você pode jogar com o comando find e a opção -mtime , que procura arquivos cujos dados foram modificados pela última vez há X dias atrás. Então, para encontrar todos os arquivos criados, por exemplo 48 horas atrás no diretório de trabalho atual use

find ./ -type f -mtime 2

para movê-los para outro diretório

find ./ -type f -mtime 2 -exec mv {} DEST_DIR \;

Além disso, você pode tentar estimar o número de dias a partir da data atual e a data a partir da qual você solicitou os arquivos (neste exemplo 22)

DAY_CUR="'date +%d'"
DAY_REQ=22
DAY_DIF=$((DAY_CUR - DAY_REQ))

find ./ -type f -mtime $DAY_DIF -exec mv {} DEST_DIR \;

O código não é perfeito, pois não lida com situações em que os dois dias são de dois meses diferentes, mas ilustra como você pode prosseguir.

    
por 28.08.2013 / 13:47
3

Você quer mover arquivos com base em seus atributos. Isso significa que você precisa identificar ou "localizar" os arquivos e depois mover o resultado para uma pasta diferente.

O utilitário find fará um excelente trabalho: -)

find chamado sem nenhum argumento apenas listará o conteúdo completo da pasta. Você pode, então, especificar vários critérios de filtragem. Para obter uma lista completa, consulte man find ( link ).

Aqui estão alguns exemplos:

  [..]
   -mmin n
      File's data was last modified n minutes ago.

   -mtime n
      File's  data was last modified n*24 hours ago.  See the comments
      for -atime to understand how rounding affects the interpretation
      of file modification times.

   -newer file
      File was modified more recently than file.  If file  is  a  sym-
      bolic  link and the -H option or the -L option is in effect, the
      modification time of the file it points to is always used.
  [..]

Você pode usar -exec para chamar mv e usar {} como um espaço reservado para o arquivo atual.

Exemplo: find /some/path/ -mtime +4 -exec mv {} /some/other/path/

Dica: chame find sem -exec para ver se você obtém os arquivos corretos: -)

    
por 28.08.2013 / 13:55
1

Você pode usar o comando find para determinar os arquivos criados em um dia e usar um padrão de nome de arquivo para restringir ainda mais a pesquisa. Use os arquivos -exec in find to mv .

    
por 28.08.2013 / 13:46

Tags