Alterando a data de criação de um arquivo

62

Você poderia me informar como posso alterar a data de criação de um arquivo no Lion. Sei que existe o comando touch-t, mas isso não funciona no Lion. Algumas pessoas mencionaram outra maneira, mas acho que elas escreveram a solução na linguagem "codificador" em vez da linguagem leiga - alguém seria capaz de responder de uma maneira que um leigo possa executar?

Muito obrigado pela sua ajuda.

user55502
fonte
A explicação do "codificador" sobre a qual outras pessoas escreveram provavelmente é uma referência ao "toque". Você teria que abrir um terminal, navegar para a pasta onde o arquivo está e, em seguida, usar o comando touch para modificar a data de criação do arquivo.
Derek Cavaleiro
2
FWIW Você está nas linhas corretas com "touch-t", mas há um espaço entre ah e -. É "touch -t"
Derek Knight

Respostas:

95

touch -tnormalmente apenas altera os tempos de modificação e acesso. Ele altera o horário de criação apenas se o horário de destino for anterior ao horário de criação original.

touch -t 199912312359 file.txt
touch -t $(date -jf %FT%T 1999-12-31T23:59:59 +%Y%m%d%H%M%S) file.txt

SetFile -d sempre altera o horário da criação.

SetFile -d '12/31/1999 23:59:59' file.txt
SetFile -d "$(GetFileInfo -m test.txt)" file.txt

SetFile faz parte do pacote de ferramentas de linha de comando, que pode ser baixado em developer.apple.com/downloads ou nas preferências do Xcode.

Lri
fonte
4
-m para alterar o tempo de modificação.
precisa saber é o seguinte
5
Em Yosemite, o toque exigia que eu usasse o formato +%Y%m%d%H%M.%S(observe o ponto entre minutos e segundos)
Calimo 27/04/2015
Eu escrevi uma função chamada CpCreationDateem fish:SetFile -d (GetFileInfo -m $argv[1]) $argv[2]
Pascal
15

No Mac OS X, parece haver quatro carimbos de data e hora diferentes associados a um arquivo. Estas marcas de tempo nem sempre são atualizados independentemente um do outro, mas pode ter algum controle individual com um pouco de cuidado e com o uso de touch, SetFilee chown(ou chmod). Para ver isso, vamos experimentar e criar um novo arquivo no prompt de comando #:

# touch a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "May 19 00:11:14 2015" "May 19 00:11:14 2015" "May 19 00:11:14 2015" "May 19 00:11:14 2015" 4096 0 0 a.txt

A primeira data listada é a hora do último acesso ( atime), a segunda é a hora da última modificação ( mtime), a terceira é a última alteração de status ( ctime), a quarta é a hora da criação do arquivo (nascimento Btime), consulte man lstat.

Para modificar o tempo de acesso ( atime) para um horário especificado, use:

# touch -a -t201412312359.59 a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "May 19 00:11:14 2015" "May 19 00:11:46 2015" "May 19 00:11:14 2015" 4096 0 0 a.txt

Para modificar o horário da modificação ( mtime) e o horário da criação do arquivo ( Btime) para um horário especificado, use:

# touch -m -t201312312359.59 a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "Dec 31 23:59:59 2013" "May 19 00:12:19 2015" "Dec 31 23:59:59 2013" 4096 0 0 a.txt

Aparentemente, isso também atualiza automaticamente a hora da última alteração de status ( ctime) para a hora atual do sistema!

Para modificar apenas o tempo de criação / nascimento ( Btime) para um determinado momento, use (conforme proposto por outros acima):

# SetFile -d "12/31/1999 23:59:59" a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "Dec 31 23:59:59 2013" "May 19 00:12:19 2015" "Dec 31 23:59:59 1999" 4096 0 0 a.txt

Para modificar apenas a hora da última alteração de status ( ctime) para a hora atual do sistema, use, por exemplo:

# chown username a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "Dec 31 23:59:59 2013" "May 19 00:13:45 2015" "Dec 31 23:59:59 1999" 4096 0 0 a.txt

onde usernameé o proprietário do arquivo (conforme relatado por statou ls -l). Isso não altera a propriedade do arquivo, mas acessa o inode do arquivo e registra isso como uma hora da última alteração de status. Infelizmente, não é possível especificar a hora explicitamente aqui, exceto alterando a hora do computador ...

Em resumo, para poder alterar os quatro registros de data e hora de forma independente, pode-se usar (nesta ordem pelos últimos 3):

  1. touch -a -tCCYYMMDDHH.SS <file>
  2. touch -m -tCCYYMMDDHH.SS <file>
  3. SetFile -d "MM/DD/CCYY HH:MM:SS" <file>
  4. [definir data do sistema] chown username <file>[reverta para a data normal do sistema]

(Obviamente, redefinir a data do sistema pode não ser uma operação isenta de riscos, você foi avisado.)

armando.sano
fonte
+1 Obrigado por esta resposta super detalhada. Isso resolveu todos os meus problemas.
Govind Rai
13

O comando da linha de touchcomando funciona no Lion, mas você precisa de um pouco de conhecimento sobre como usá-lo.

Primeiro, você precisa digitar, não é um utilitário que opera graficamente em uma janela. O local em que você digita é um aplicativo chamado Terminal . Você pode encontrar isso na pasta Utilitários ou usar a pesquisa do Spotlight para encontrá-lo.

Depois de iniciá-lo, você obtém uma janela de linha de comando onde é possível digitar comandos. Só porque você está digitando não significa que tenha alguma coisa a ver com codificação, mas para alguém novo nos comandos do sistema operacional "antiquado" pode parecer um pouco intimidador.

Portanto, o comando é chamado de toque e, após o comando, você pode passar vários parâmetros, o único necessário é o nome do arquivo. Digitar o seguinte definirá a data da última modificação do arquivo para a hora atual:

touch filename

Obviamente, pode ser necessário encontrar o arquivo primeiro, o que pode exigir mais comandos para chegar a ele. o comando cd ou Change Directory ajuda aqui:

cd ~/Desktop/files/PDFs
touch filename

Ou, você pode simplesmente adicionar o caminho completo ao arquivo como parte do comando:

touch ~/Desktop/files/PDFs/filename

O uso mais avançado do comando touch permite especificar o tempo que você deseja definir, em vez de usar o tempo de execução, definir o acesso em vez dos tempos de modificação etc. É assim que parâmetros como -t e outros fazem. Alguns definem a hora para ser a hora de outro arquivo, alguns definem para voltar ou avançar no tempo pela quantidade X ( veja aqui para mais detalhes), por exemplo:

touch -d '1 May 2005 10:22' file8

A seguir, é apresentada nesta página, que também é uma referência útil, e um ótimo exemplo com algumas dicas para quem não se sente à vontade com os locais dos arquivos na linha de comando

Observe que isso alterará os atributos de data de modificação e de criação de data somente se seu arquivo foi criado após a data digitada. Isso ocorre porque um arquivo não pode ser modificado antes de ser criado. Se criado antes da data definida, apenas a data modificada será alterada.

Como alterar o atributo de data de criação de um arquivo?

  1. Abra o aplicativo Terminal ( /Applications/Utilities/Terminal.app) ou, se preferir, use o iTerm.

  2. Digite isso no Terminal (sem pressionar Enter / Return), inserindo a data no formato de YYYYMMDDhhmm:

    touch -t 201212211111
    
  3. Abra uma janela do Finder, localize o arquivo que você deseja modificar, arraste e solte-o na janela Terminal e, em seguida, insira o local do arquivo usando a terminologia da linha de comando. Aqui está um exemplo do que deve ser digitado no Terminal neste momento:

    touch -t 201212211111 /Volumes/Mac\ HD/Pictures/somefile.jpg
    

    201212211111 no exemplo acima representa "21 de dezembro de 2012 11h11

abafar
fonte
2
Mas touchmodifica a data modificada, não a data de criação do arquivo.
Daniel
11
Pode fazer as duas coisas. Depende dos parâmetros.
stuffe
2
O uso touchdos parâmetros que você forneceu acima alterou a modificação, mas não as datas de criação do meu arquivo de teste.
Daniel
2
@ Daniel Você provavelmente obteve sua resposta, mas, por questões de integridade touch , modifica a data de criação, dependendo dos argumentos. Se você fornecer uma data de modificação anterior à data de criação do arquivo, a data de criação mudará automaticamente para o novo valor da data de modificação, pois um arquivo não poderá ser modificado antes de ser criado.
Govind Rai
2
Eu apenas tentei isso no Sierra e o toque definitivamente não muda a creationdata. Consegui alterar accesse modifieddatas para uma "data no passado", mas ela não modificou a data de criação. Verifique a página de manual para ver o toque, não menciona a data de criação. Sistema de arquivos: Mac OS Extended (Registrado em Diário, Criptografado). Usando SetFile -d "$(GetFileInfo -m test.txt)" file.txtfuncionou perfeitamente.
Jonathan Cross
7

Grandes sugestões aqui, em particular a última (de Lauri Ranta, respondida em 21 de agosto às 15:21). Perfekt!

Agora eu uso um simples fluxo de trabalho do Automator para alterar vários arquivos em lote:

  1. Obter itens do Finder selecionados
  2. Execute o Shell Script, "Passar entrada: como argumentos"

O script de shell é:

for f in "$@"
do
    SetFile -d "$(GetFileInfo -m "$f")" "$f" 
done

Isso funciona como um encanto.

Claudio Wilmanns
fonte
0

A maneira mais fácil que encontrei foi criar uma nova pasta, copiar todas as subpastas da pasta acinzentada para a nova pasta e pronto, a nova pasta não está acinzentada. Você pode até fazer isso no localizador.

O que seria legal
fonte