Изменить дату изменения папки на основе самой последней даты изменения файла в папке

У меня есть несколько папок с проектами, в которых для всех изменена дата, настроенная на текущую дату и время, несмотря на то, что я ничего не трогал в папках. Я ищу способ использования пакетного апплета или какой-либо другой утилиты, которая позволит мне удалить папку / папки на ней, и в качестве даты их изменения будет задана дата изменения самого последнего измененного файла в папке. Может кто-нибудь сказать, пожалуйста, как я могу это сделать?

В случае, если это имеет значение, я на OS X Mavericks 10.9.5. Спасибо!

1 ответ

Решение

Если вы запускаете терминал и используете stat Вы можете получить времена изменения всех файлов и их соответствующие имена, разделенные двоеточием, следующим образом:

stat -f "%m:%N" *

Пример вывода

1476985161:1.png
1476985168:2.png
1476985178:3.png
1476985188:4.png
...
1476728459:Alpha.png
1476728459:AlphaEdges.png

Теперь вы можете отсортировать его, взять первую строку и удалить метку времени, чтобы у вас было имя самого нового файла:

stat -f "%m:%N" *png | sort -rn | head -1 | cut -f2 -d:

Пример вывода

result.png

Теперь вы можете поместить это в переменную, и использовать touch чтобы установить время модификации всех других файлов, чтобы соответствовать времени его модификации:

newest=$(stat -f "%m:%N" *png | sort -rn | head -1 | cut -f2 -d:)
touch -r "$newest" *

Итак, если вы хотите иметь возможность сделать это для любого заданного имени каталога, вы можете сделать небольшой скрипт в вашем каталоге HOME под названием setMod как это:

#!/bin/bash
# Check that exactly one parameter has been specified - the directory
if [ $# -eq 1 ]; then
   # Go to that directory or give up and die
   cd "$1" || exit 1
   # Get name of newest file
   newest=$(stat -f "%m:%N" * | sort -rn | head -1 | cut -f2 -d:)
   # Set modification times of all other files to match
   touch -r "$newest" *
fi

Затем сделайте этот исполняемый файл, просто необходимый один раз, с помощью:

chmod +x $HOME/setMod

Теперь вы можете установить время модификации всех файлов в /tmp/freddyFrog как это:

$HOME/setMod /tmp/freddyFrog

Или, если хотите, вы можете вызвать это из Applescript с помощью:

do shell script "$HOME/setMod " & nameOfDirectory

nameOfDirectory нужно будет смотреть Unix-ы (вроде /Users/mark/tmp), а не Apple-у (как Macintosh HD:Users:mark:tmp).

Другие вопросы по тегам