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

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

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

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

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

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

  • Что случилось с файлом, когда я ввел «mv file.txt ../»?
  • Запишите переменную, содержащую большой текст, с \ n в файл с обычными интерпретаторами интерпретаторов. Как ты делаешь это?
  • Как я могу получить записи за определенный период времени из файла журнала 400 МБ +?
  • Где я могу найти ссылку на формат поля комментария (поле 5) файла / etc / passwd?
  • Сетевые диски в облаке?
  • Сканирование изменений файлов в некоторых каталогах раз в 6 часов
  • Липкий бит и пользователи с разрешением sudo
  • Колебательное количество файлов и каталогов
  • 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/ 
    Interesting Posts

    эффективная функция командной строки файла cross-os

    Вход SSH без пароля с kerberos

    Сравните два каталога, но только часть имени файла

    Ubuntu / GlusterFS: не удалось создать тонко подготовленный том из ранее созданного пула, используя lvcreate

    Как изменить домашний раздел после переустановки Debian 8?

    Зачем ставить некоторую конфигурационную информацию в conf / httpd.conf и некоторые из файлов в папке conf.d?

    attron (A_BLINK), используя Ncurses, ничего не делает

    Поддерживает ли виртуальный мост Linux VLAN?

    mv удалил мой каталог. Зачем?

    Разрешить одну запись за раз в работе над окном?

    Почему POSIX Find Parameters отличается от других стилей программы?

    Как копировать разрешения от владельца другим пользователям с помощью `chmod`?

    Выбор / выделение текстовой проблемы

    Вариант Linux / Unix для обучения системных администраторов

    Извлечь аудио из видео в Linux с помощью графического интерфейса?

    Linux и Unix - лучшая ОС в мире.