Как перечислить файлы, отсортированные по дате изменения, рекурсивно (нет команды stat!)

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

Теперь я знаю, как добиться этого с помощью find , stat и sort , но по какой-то странной причине stat не установлен на ящике, и вряд ли я смогу его установить.

Любой другой вариант?

PS: gcc не установлен ни

  • регулярное выражение с командой find
  • команда «find ... -exec mv ...» создала файл со странным контентом
  • Скопируйте файлы, которые частично соответствуют другим файлам в другом месте
  • Определите размер резервной копии за 7 дней
  • Как tar-bzip старые файлы в ежегодных группах
  • Перемещение открытого файла на другое устройство
  • Найти старое имя каталога на удаленном сервере?
  • скрипт для удаления файлов, если нет соответствующего файла с тем же именем, но другого расширения в другом подкаталоге
  • 5 Solutions collect form web for “Как перечислить файлы, отсортированные по дате изменения, рекурсивно (нет команды stat!)”

    Мой самый короткий метод использует zsh:

     print -rl **/*(.Om) 

    Если у вас есть GNU find, заставьте его распечатать время изменения файла и отсортировать его. Я предполагаю, что в именах файлов нет новых строк.

     find . -type f -printf '%T@ %p\n' | sort -k 1 -n | sed 's/^[^ ]* //' 

    Если у вас есть Perl (опять же, при отсутствии новых строк в именах файлов):

     find . -type f -print | perl -l -ne ' $_{$_} = -M; # store file age (mtime - now) END { $,="\n"; print sort {$_{$b} <=> $_{$a}} keys %_; # print by decreasing age }' 

    Если у вас есть Python (опять же, при отсутствии новых строк в именах файлов):

     find . -type f -print | python -c 'import os, sys; times = {} for f in sys.stdin.readlines(): f = f[0:-1]; times[f] = os.stat(f).st_mtime for f in sorted(times.iterkeys(), key=lambda f:times[f]): print f' 

    Если у вас есть SSH-доступ к этому серверу, смонтируйте каталог поверх sshfs на более оборудованной машине:

     mkdir mnt sshfs server:/path/to/directory mnt zsh -c 'cd mnt && print -rl **/*(.Om)' fusermount -u mnt 

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

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

     set -ef # disable globbing IFS=' ' # split $(foo) only at newlines set -- $(find . -type f) # set positional arguments to the file names mkdir links.tmp cd links.tmp i=0 list= for f; do # hard link the files to links.tmp/0, links.tmp/1, … ln "../$f" $i i=$(($i+1)) done set +f for f in $(ls -t [0-9]*); do # for each file, in reverse mtime order: eval 'list="${'$i'} # prepend the file name to $list $list"' done printf %s "$list" # print the output rm -f [0-9]* # clean up cd .. rmdir links.tmp 

    Предполагая, что GNU find :

     find . -printf '%T@ %c %p\n' | sort -k 1n,1 -k 7 | cut -d' ' -f2- 

    Измените 1n,1 на 1nr,1 если вы хотите, чтобы файлы, перечисленные в первую очередь, были первыми.

    Если у вас нет find GNU, это становится сложнее, потому что формат timestamp ls изменяется так сильно (например, недавно измененные файлы имеют другой стиль метки времени).

    На mac нет аргумента -printf для поиска, но вы можете сделать это вместо этого:

    find . -print0 | xargs -0 -n 100 stat -f"%m %Sm %N" | sort -n|awk '{$1="";print}'

    можно попробовать это (нужно создать его самостоятельно) https://github.com/shadkam/recentmost

    Игнорирование скрытых файлов – с хорошей и быстрой печатью времени

    Хорошо обрабатывает пробелы в именах файлов – не то, что вы должны их использовать!

     $ find . -type f -not -path '*/\.*' -printf '%TY.%Tm.%Td %THh%TM %Ta %p\n' |sort -nr |head -n 10 2017.01.25 18h23 Wed ./indenting/Shifting blocks visually.mht 2016.12.11 12h33 Sun ./tabs/Converting tabs to spaces.mht 2016.12.02 01h46 Fri ./advocacy/2016.Vim or Emacs - Which text editor do you prefer?.mht 2016.11.09 17h05 Wed ./Word count - Vim Tips Wiki.mht 

    Дополнительную find можно найти по ссылке.

    Interesting Posts

    Полностью не GUI (или терминал) способ подключения к проводной сети 802.1x

    Команда zmv для переименования файла после сопоставления шаблона

    Преобразование таблицы в csv и обратно

    Повторное использование Colon / Semicolon с помощью xmodmap с двумя активными макетами setxkbmap

    Ошибка (?) В выводе команды dd

    Жесткие диски пропадают без перезагрузки – что может быть причиной?

    Я только что удалил каталог / usr / share / X11 / xkb / symbols и перезапустил, как я могу по-прежнему печатать?

    Почему мой скрипт медленно использует все больше и больше памяти? Это из-за мидори?

    Экстра% в выходе скрипта awk

    Извлечение символов из последовательного порта

    Как извлечь функцию из файла?

    Безопасное извлечение флеш-накопителя USB

    Как я могу запустить скрипт в /etc/init.d при загрузке?

    bash перемещение скрытых файлов, сброс dotglob?

    Символическая ссылка не работает так, как ожидалось при изменении пользователя

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