У меня есть несколько файлов с одинаковой датой изменения в папке, и я хотел бы изменить дату для всех файлов в этой папке, и то же самое с другими папками в каталоге, чтобы каждое содержимое даты изменения любой папки отличалось в любую папку.
Если это не имеет смысла, вот скриншот примера каталога. Цель состоит в том, чтобы изменить дату модификации на другую дату содержимого папки и сделать то же самое с содержимым другой папки с другой датой.
Я знаю, что можно коснуться нескольких файлов за один раз, используя touch -t YYYYMMDDhhmm file1 file2 file3
, однако есть ли способ автоматизировать этот процесс со случайной датой?
Это необычная просьба. Я не уверен, почему вы хотели бы это сделать, но это вызвало у меня интерес. Мы будем использовать jot
для выбора случайное число от 1 до 16000.
jot -r 1 1 16000
Это будет количество часов, которое мы вычтем из текущей даты.
seed=$(jot -r 1 1 16000)
date -v-"$seed"H "+%Y%m%d%H%M.%S"
Обратите внимание, что date
выше форматирует дату для работы с сенсорным экраном.
Теперь мы используем find
список всех каталогов в текущем рабочем каталоге и используем «встроенный» скрипт для доступа ко всем объектам файловой системы в каждом каталоге с уникальным временем модификации в каждом каталоге.
find . ! -name '.' -type d -exec bash -c ' for dir
do
seed=$(jot -r 1 1 16000)
echo touch -t "$(date -v-"$seed"H "+%Y%m%d%H%M.%S")" "${dir}/"*
done
' sh {} \;
Мы еще не закончили, потому что мы без разбора изменили время модификации вложенных каталогов. Нам нужно уникальное время модификации для каждого каталога.
find . ! -name '.' -type d -exec bash -c ' for dir
do
seed=$(jot -r 1 1 16000)
echo touch -t "$(date -v-"$seed"H "+%Y%m%d%H%M.%S")" "${dir}"
done
' sh {} \;
И чтобы собрать все это вместе-
#! /bin/ksh
find . ! -name '.' -type d -exec bash -c ' for dir
do
seed=$(jot -r 1 1 16000)
echo touch -t "$(date -v-"$seed"H "+%Y%m%d%H%M.%S")" "${dir}/"*
done
' sh {} \;
find . ! -name '.' -type d -exec bash -c ' for dir
do
seed=$(jot -r 1 1 16000)
echo touch -t "$(date -v-"$seed"H "+%Y%m%d%H%M.%S")" "${dir}"
done
' sh {} \;
Этот сценарий может завершиться ошибкой, если вы превысите значение ARG_MAX, и в настоящее время он будет отображать только те изменения, которые может внести касание. Вы можете удалить echo
перед, touch
чтобы внести изменения. Имейте в виду, что этот сценарий прошел ограниченное тестирование и предлагается КАК ЕСТЬ.
touch
, однако это было легко %S
исправить, просто удалив .ksh
функции даты в использование внешней date
команды для bash
.
IconDaemon
Мистер У