Как получить последний файл из списка файлов в определенном каталоге

Мне нужно получить последний файл из списка файлов в определенном каталоге.

Когда я запускаю сценарий, первый раз я скопировал список файлов в определенном каталоге в другой каталог.

Со второго запуска мне нужно получить последние файлы из списка файлов в том же каталоге, чтобы скопировать эти файлы в другой каталог.

Здесь, в первом запуске, я фиксирую дату создания последнего файла в переменной, когда скрипт выполняется во второй раз, файлы, которые больше, чем последняя дата создания файла в первом запуске; эти файлы необходимо скопировать в другой каталог.

Пожалуйста, может кто-нибудь помочь мне, чтобы получить последние файлы?

  • задайте файл, найдите, где в подкаталоге он был скопирован в
  • Сжатие изображения
  • Как отсортировать файл на основе раздела поля
  • Ограничительные «групповые» разрешения, но открывают «мировые» разрешения?
  • Представление иерархии файловой системы
  • Что такое консультативная блокировка файлов, которые обычно используют системы Unix?
  • слияние файлов txt с похожим именем
  • Удалите все jpg в папке, которая меньше определенной ширины / высоты
  • 4 Solutions collect form web for “Как получить последний файл из списка файлов в определенном каталоге”

    ls -t1 | head -n 1 

    В первом списке будут указаны все файлы, упорядоченные по времени доступа, а вторая – первая.

    Если вы просто копируете файлы из одного каталога в другой в зависимости от времени их модификации, вы можете рассмотреть rsync . Очень простой способ сделать то же самое:

     rsync -t ./dir1/ ./dir2/ 

    Или просто посмотреть, что он будет делать:

     rsync -t --list-only ./dir1/ ./dir2/ 

    Как отмечает Жиль в комментарии ниже, могут быть смягчающие обстоятельства, которые устраняют использование опции -t для вас. Но если вы отнимете что-нибудь от этого, пусть это так, что вы можете и должны тестировать --list-only результаты, а параметр --list-only rsync – это очень простой способ сделать это.

    Кроме того, возможно …

     man rsync 

    Если ваша фактическая цель состоит в том, чтобы переместить кучу файлов на основе времени модификации, а версия find вашей системы поддерживает тип -newerXY тестов, вы можете сделать что-то вроде

     find -type f -newermt "@$lasttime" -exec mv -t path/to/destination/ {} + 

    где $lasttime – это время изменения файла, которое вы сохранили ранее, в секундах с эпохи (например, полученное из stat -c %Y yourfile ).

    Вы также можете использовать find -newer somefile или find -newermm somefile чтобы сравнить время модификации с файлом ссылки напрямую, вместо сохранения метки времени ссылочного файла в переменной.

    Чтобы ограничить выделение текущим каталогом (исключить подкаталоги), вы можете добавить -maxdepth 1 в команду find .

    В zsh последний файл в текущем каталоге

     a=(*(om[1])) latest_file=$a[1] cp -p $latest_file /other/directory 

    ( Glob qualifiers rock, но, к сожалению, результат по-прежнему остается списком, даже если вы запрашиваете только один элемент, следовательно, временный массив a .)

    В других оболочках, если вы знаете, что имена ваших файлов не могут содержать символы новой строки или непечатаемые символы, вы можете использовать ls :

     latest_file=$(ls -t | head -n 1) cp -p "$latest_file" /other/directory 

    Однако кажется, что вы действительно просите список файлов, которые новее, чем определенный файл. Для этого вы можете использовать встроенную в find -cnewer find для обнаружения файлов, содержимое или метаданные которых изменились совсем недавно, чем некоторые другие файлы. Обратите внимание, что способ, которым я вызываю его здесь, find также собирает файлы в подкаталогах.

     find . -cnewer "$previous_latest_files" -exec sh -c 'cp -p "$@" "$0"' /other/directory {} + 

    Остается проблема обнаружить предыдущий последний файл … Фактически, важна дата копии. Поэтому создайте файл маркера, когда сделаете копию.

     find . -cnewer marker_file -exec sh -c 'cp -p "$@" "$0"' /other/directory {} + touch marker_file 

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

     rsync -a . /other/directory/ 
    Linux и Unix - лучшая ОС в мире.