Как найти последний созданный файл в текущем каталоге на компьютере с Linux?
Примечание: я не знаю mtime.
Как найти последний созданный файл в текущем каталоге на компьютере с Linux?
Примечание: я не знаю mtime.
Решение, которое безопасно для файлов с пробелами в имени файла. Строки заканчиваются на 0
с print0
.
$ touch "file with spaces"
$ find . -maxdepth 1 -type f -print0 | xargs -0r ls -ltr | tail -1
-rw-rw-r-- 1 jris jris 0 jun 3 15:35 ./file with spaces
или может быть проще:
ls -ltrp | grep -v / | tail -1
-p
добавляет конечные /
к каталогам, а затем grep
удаляет их.
Linux не хранит временную метку для рождения файла, но если с момента его создания в каталоге не было никаких других файлов, вы можете отсортировать файлы по времени их изменения и вернуть первое.
ls -at | head -1
Если вы используете файловую систему ext, вы можете использовать debugfs
для получения даты создания индекса. Таким образом, вы можете собрать inode для каждого файла в текущем каталоге, а затем отсортировать по времени создания:
#!/usr/bin/env bash
## This will hold the newest timestamp
newestT=0
## Get the partition we are running on
fs=$(df --output=source "$@" | tail -1);
## Iterate through the files in the directory
## given as a target
for file in "$@"/*; do
## Only process files
if [ -f "$file" ]; then
## Get this file's inode
inode=$(ls -i "$file" | awk 'NR==1{print $1}');
## Get its creation time
crtime=$(sudo debugfs -R 'stat <'"${inode}"'>' $fs 2>/dev/null | grep -oP 'crtime.*-- \K.*');
## Convert it to a Unix timestamp
timestamp=$(date -d "$crtime" +%s)
## Is this newer than the newest?
if [[ $timestamp -gt $newestT ]]; then
newestT=$timestamp;
newest="$file";
fi
fi
done
## Print the newest file
echo "$newest"
Сохраните приведенный выше скрипт как ~/bin/get_newest.sh
, сделайте его исполняемым (chmod 744 get_newest.sh
) и запустите так:
~/bin/get_newest.sh /target/directory
В отличие от других ответов, этот на самом деле вернет самый новый файл с точки зрения даты его создания, а не тот, который был изменен совсем недавно.
Он будет работать только на файловых системах ext4 (возможно, 3, не уверен).
Он может иметь дело с любыми именами файлов, пробелами и символами новой строки и т.д. Не является проблемой.
ls -ltrh
и последний файл, показанный внизу, самый новый.
Классические файловые системы Unix не хранят время создания файла. Самое близкое к классическим файловым системам - время создания инода. Это не когда файл создается в текущем каталоге, а когда он был создан в этой файловой системе. Если он перемещается, индекс перемещается, но время создания остается тем же. Если вы "перемещаетесь" по файловым системам, это действительно копия +rm, и в новой файловой системе создается индекс. Это может или не может быть то, что вы хотите.
Команда: ls -1c | head -1
найдет последнее время создания инода.