Сортировка файлов в каталоге по дате создания (рождение)
В моей папке "Скачать" у меня есть много файлов. Мне нужен первый способ упорядочить их по типу, вторые файлы с тем же типом расположения становятся по типу, который я добавил (или могу сказать, скачал или родился (если я не ошибаюсь)) их в мою папку "Загрузки". Посмотрите, пожалуйста, введите описание ссылки здесь. В моем каталоге загрузок у меня есть pdf,zip и т. д., когда я захожу в каталог загрузок. Сначала я хочу увидеть, как мои tar.gz собраны вместе (упорядочены по типу). В файлах gz есть время, когда я добавляюсь в этот каталог. Например, я ищу пятый файл tar.gz самого младшего времени рождения.
1 ответ
Мой предыдущий ответ был начат с неправильного утверждения:
Linux не хранит время создания файла
Да - ядро Linux не предоставляет API для получения меток времени создания из файловой системы.
Но, как написано в вики ext4, укажите временные метки создания файла:
В ext4 также добавлена поддержка созданных дат. Но, как указывает Теодор Цо, хотя в inode легко добавить дополнительное поле даты создания (таким образом, технически обеспечивая поддержку временных меток, созданных датой в ext4), сложнее изменить или добавить необходимую систему. вызовы, такие как stat() (что, вероятно, потребует новой версии) и различные библиотеки, которые зависят от них (например, glibc).
Также как ответил в unix.stackexchange
Several file systems store the file creation time,
although there is no standard name for this field:
- ufs2 → st_birthtime
- zfs → crtime
- ext4 → crtime
- btrfs → otime
- jfs → di_otime
Вот отличный вопрос / ответ, как найти штамп создания файла. Сценарий, написанный @terdon:
get_crtime() {
for target in "${@}"; do
inode=$(ls -di "${target}" | cut -d ' ' -f 1)
fs=$(df --output=source "${target}" | tail -1)
crtime=$(sudo debugfs -R 'stat <'"${inode}"'>' "${fs}" 2>/dev/null |
grep -oP 'crtime.*--\s*\K.*')
printf "%s\t%s\n" "${target}" "${crtime}"
done
}
Добавьте этот скрипт в ваш.bashrc.
Теперь с помощью этого скрипта вы можете получить то, что вы хотите.
Перейдите в папку, содержимое которой вы хотите отсортировать
$ cd ~/Downloads
$ get_crtime * | sed -r 's/\s+/ /g' | cut -d" " -f1,3,4,6 | sort -k2M -k3,4n
За tar.gz
файлы
$ get_crtime *.tar.gz | sed -r 's/\s+/ /g' | cut -d" " -f1,3,4,6 | sort -k2M -k3,4n
источники