Найти все файлы с (поврежденной) датой будущего и изменить на сегодняшний день
231 из нескольких тысяч файлов в иерархии папок имеют неправильные (нулевые?) Даты создания и изменения. Я могу идентифицировать их:
find . -mtime -0
И их даты все хорошо в будущем. Не совсем точно, но те немногие, с которыми я смотрел ls -l
как представляется, в 2040 году.
В любом случае, я бы хотел, чтобы 1-е отображение даты создания и модификации в выводе вышеприведенной команды, если это возможно.
Во-вторых, и что более важно, я хотел бы изменить даты создания и изменения этих файлов на сегодня (сейчас).
Я не большой гуру Баш, но я знаю, что есть простой способ. Заранее спасибо!
1 ответ
Я бы использовал "find" следующим образом и exec "touch", чтобы установить дату изменения:
find . -mtime -0 -exec touch {} \;
Не уверен, как / если можно изменить дату создания. Возможно, вам придется воссоздать файл, скопировав его с новым временным именем, а затем переименовав его обратно в исходное имя. GNU Touch может помочь здесь...
Вы можете использовать "ls -Ul" для даты создания файла и "ls -l" для времени изменения, например:
find .-mtime -0 -exec ls -Ul {} \;
или же
find .-mtime -0 -exec ls -l {} \;
Один из приемов - скопировать и переместить файл на место. Остерегайтесь владельца и режима файла, иначе это приведет к более серьезной поломке вашей системы.
В качестве примера вот fstab с неправильной меткой времени:
$ stat /etc/fstab
File: '/etc/fstab'
Size: 37 Blocks: 8 IO Block: 4096 regular file
Device: b30ah/45834d Inode: 504 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 0/ user)
Access: 2105-12-20 17:23:10.624000001 +0000
Modify: 2018-07-31 00:29:37.000000000 +0000
Change: 2020-01-21 08:58:48.779991299 +0000
Birth: -
$ sudo cp /etc/fstab /etc/fstab_ --preserve=ownership --preserve=mode
$ sudo mv /etc/fstab_ /etc/fstab
$ stat /etc/fstab
File: '/etc/fstab'
Size: 37 Blocks: 8 IO Block: 4096 regular file
Device: b30ah/45834d Inode: 1534 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 1000/ user)
Access: 2020-02-06 16:52:33.684297747 +0000
Modify: 2020-02-06 16:52:33.684297747 +0000
Change: 2020-02-06 16:52:43.093550721 +0000
Birth: -
$
В наборе команд из двух строк это будет:
$ sudo find / -type f -newermt 2020-02-07 -exec cp {} {}_ --preserve=ownership -preserve=mode \;
Затем найдите скопированные файлы и верните их на место.
$ sudo find / -type f -iname "*_" -exec mv {}_ {} \;
Вы можете проверить даты с помощью следующей команды:
$ sudo find / -type f -newermt 2020-02-07
Примечание. В качестве завершающего символа я выбрал "_", пожалуйста, адаптируйте его к вашим потребностям, чтобы избежать конфликтов в вашей файловой системе.