Intereting Posts
Как я могу найти все файлы ascii в одном каталоге, в котором есть слово «рубашка»? Начиная с корня Один экземпляр скрипта, но только с одинаковыми аргументами yum не работает после ввода команды в RHEL 7 Файлы без атрибутов, владельца, группы и инодов Vim: s заменить первые N <g вхождения на строку Как обновить / понизить определенный пакет с «sid» на debian jessie «stable»? Почему я могу запустить `sudo bash`, но не` sudo su`? ошибки сертификата, пытающиеся создать virtualenv на старом Ubuntu Для чего используются файлы * .ko? Чтение с / dev / устройств ввода без прав root Необязательный выбор шрифта Fontconfig по умолчанию, как он определяется в конфигурациях XML? Не удалось найти в документации Как я могу вызвать запрос на кодовую фразу ssh key во время выполнения скрипта? grep с переменной с использованием ssh В разделе меню панели инструментов LXDE доступны категории и элементы приложения? Есть ли проблемы с использованием 2TB жестких дисков с 4k секторами

найти наибольшие последние измененные файлы / dirA / file, / dirB / file

Предположим, что у нас есть две директории: dirA, dirB, которые точно совпадают с файлами PDF, просто измененными последними.

Что такое скрипт bash (без awk), который может выполнять поиск по каждому имени файла (предположительно всегда в обоих dirA, dirB) и для каждого имени файла, выводит, какой из файлов (dirA / file или dirB / file) имеет более последний модифицированный ; файл-модифицированный последний? например

if dirA/file.lastmodified > dirB/file.lastmodified ##take action 

С GNU stat:

 shopt -s dotglob for file in dirA/*; do [[ -f "dirB/${file##*/}" ]] || continue if (( "$(stat -c %Y "$file")" > "$(stat -c %Y "dirB/${file##*/}")" )); then # take action fi done 

Bash, ksh, zsh и даже ash имеют оператор -nt для [ builtin (и в bash / ksh / zsh конструкцию [[ … ]] ), которая проверяет, является ли файл более новым, чем другой.

 for x in dirA/*; do y=dirB/${x#*/} if [ "$x" -nt "$y" ]; then # The file in dirA is more recent elif [ "$y" -nt "$x" ] # The file in dirB is more recent else # The two files have the same modification time # or the file doesn't exist in dirB fi done 

Возможное решение с инструментами GNU:

 find dirA dirB -type f -printf '%T@/%p\0' | tr '\n\0\t/' '\0\n/\t' | sort -k3 -k1,1rg | uniq -f2 | cut -f2- | tr '\0/\t' '\n\t/' 

Сообщает каждый файл как в dirA, так и в dirB (и их подкаталогах), за исключением того, что если файл является общим для обоих, то только самые новые (или если они одного возраста, любой из них случайным образом).

Это работает только для значений dirA и dirB таких как "dirA" , то есть не содержит пустых или косой черты, хотя нет ограничений на пути файлов, которые они могут содержать.

С -type f сообщаются только обычные файлы (а не символические ссылки, fifos, devices …).

find -s- -printf , тип сортировки g , опции uniq -f и возможность sort , uniq и cut для соответствия символам NUL являются специфичными для GNU.