Сортировка файлов в каталоге по дате создания (рождение)

В моей папке "Скачать" у меня есть много файлов. Мне нужен первый способ упорядочить их по типу, вторые файлы с тем же типом расположения становятся по типу, который я добавил (или могу сказать, скачал или родился (если я не ошибаюсь)) их в мою папку "Загрузки". Посмотрите, пожалуйста, введите описание ссылки здесь. В моем каталоге загрузок у меня есть 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

источники

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