Мой опыт показал, что большинство раз безопасно изменить разделы NTFS с помощью ntfs-3g драйвера FUSE.
Но если Вы используете его много или если компьютер зависает/получает перезагруженный сильно, в то время как существует IO на разделе NTFS, Вы могли бы попасть в беду (например, ошибки IO при попытке получить доступ к файлам)
Так, для завершения:
Я предполагаю, что имена ваших файлов не содержат символов новой строки.
find /home/setefgge/public_html -type f -ctime -1 -exec ls -nls {} + | sort -k 10
Использование +
вместо ;
для завершения действия -exec
ускоряет его за счет пакетных вызовов ls
. Вы можете сортировать по конвейеру с помощью команды sort
; скажите ему начать сортировку с 10-го поля (первые 9 - это метаданные: блоки, разрешения, количество ссылок, пользователь, группа, размер и 3 поля даты / времени). Параметр -n
указывает ls
использовать числовые значения для пользователя и группы, что позволяет избежать риска того, что имена пользователей или групп будут содержать пробелы.
В качестве альтернативы, с zsh вы можете обойтись без каких-либо предположений о каком-либо имени, используя квалификаторы glob для сбора и сортировки файлов и zargs
для запуска ls
] несколько раз, если командная строка будет слишком длинной. Вам действительно нужен GNU ls
(в частности, его опция -f
), чтобы избежать повторной сортировки с помощью ls
(другой подход - эмуляция ls
] с помощью zsh zstat
).
autoload -U zargs
zargs -- /home/setefgge/public_html/**/*(.c-2) -- ls -lnsf
POSIX должен сказать это о датах в ls
-l
ong листинг:
Поле
<дата и время>
должно содержать соответствующую дату и метку времени, когда файл был последний раз изменен. В локали POSIX поле должно быть эквивалентно выводу следующей команды даты:
date "+%b %e %H:%M"
.... если файл был изменен в течение последних шести месяцев, или:
date "+%b %e %Y"
Принимая это во внимание и убедившись в том, что если в названии файла есть какие-либо новые строки, то они должны быть надлежащим образом проставлены в глобусе с использованием также опции ls -q
, относительно легко подготовить регекс для результата ls
без нахождения
вообще":
d=$(date "+%b %e") y=$(date --date=yesterday "+%b %e")
echo "$d" "$y"
###OUTPUT###
Jul 5 Jul 4
grep
для этого и вы вернете только те строки, которые содержат строки, представляющие либо сегодняшнюю, либо вчерашнюю дату. Следующая команда немного добавляет к этому:
ls -alRcq | sed "1H;/^-/!{/./d;N;h};/$d\|$y/!d;x;/\n/p;g"
ls
опции состоят из:
-a
возвращают все файлы в каталоге - включая те, которые начинаются с . dot
-l
long listing-R
recursively list all child directory-c
display time modification instead instead access time-q
return the shell glob ?
вместо непечатаемых или \t
ab символов в имени файла Эти результаты передаются через файл |pipe
в sed
, который совпадает только с файлом sed
:
-
(другими словами - не d
для каталога), которые также содержат вашу дату -
. Вывод выглядит следующим образом:
ls -alRcq --color=always |
sed "1H;/^-/!{/./d;N;h};/$d\|$y/!d;x;/\n/p;g"
###OUTPUT###
.:
-rw------- 1 mikeserv mikeserv 2086 Jul 4 10:52 .bash_history
-rw------- 1 mikeserv mikeserv 2657 Jul 4 15:20 .lesshst
-rw-r--r-- 1 mikeserv mikeserv 681 Jul 5 05:18 .zdirs
-rw------- 1 mikeserv mikeserv 750583 Jul 5 08:28 .zsh_history
-rw-r--r-- 1 mikeserv mikeserv 166 Jul 4 23:02 Terminology.log
-rw-r--r-- 1 mikeserv mikeserv 433568 Jul 4 13:34 shot-2014-06-22_17-10-16.jpg
-rw-r--r-- 1 mikeserv mikeserv 445192 Jul 4 13:34 shot-2014-06-22_17-11-06.jpg
./.cache/efreet:
-rw------- 1 mikeserv mikeserv 37325 Jul 4 22:51 desktop_localhost_C.eet
-rw------- 1 mikeserv mikeserv 37325 Jul 4 23:30 desktop_localhost_en_US.eet
-rw------- 1 mikeserv mikeserv 24090 Jul 4 22:51 desktop_util_localhost_C.eet
-rw------- 1 mikeserv mikeserv 24090 Jul 4 23:30 desktop_util_localhost_en_US.eet
-rw------- 1 mikeserv mikeserv 16037 Jul 4 23:30 icon_themes_localhost.eet
-rw------- 1 mikeserv mikeserv 3117 Jul 4 23:30 icons___efreet_fallback_localhost.eet
-rw------- 1 mikeserv mikeserv 768039 Jul 4 23:30 icons_gnome_localhost.eet
-rw------- 1 mikeserv mikeserv 18589 Jul 4 23:30 icons_hicolor_localhost.eet
./.config:
-rw-r--r-- 1 mikeserv mikeserv 30 Jul 4 19:10 pavucontrol.ini
./.config/chrome:
-rw-r--r-- 1 mikeserv mikeserv 94332179 Jul 4 13:36 conf.tar.lz4.bak
Да, он даже работает с LS_COLORS
- что, вероятно, является низким приоритетом для Вашего cron
, конечно, но, эй, Ваши опции открыты.
В любом случае, это дает некоторые существенные преимущества по сравнению с некоторыми другими возможными вариантами.
В первую очередь find
+ ls
включает в себя несколько вызовов - это только один процесс ls
, и поэтому он способен надежно сортировать все - что он делает по умолчанию - и поэтому сортировка
также является вспомогательным процессом.
Любое решение, связанное с найти
и сортировку
и ls
, в общем-то, делает все работы дважды. ls
и find
оба разрешают каждый путь и stat
каждый файл. ls
и сортировка
отсортируют все результаты. Вместо этого, наверное, лучше всего использовать единственную ls
.
Затем, конечно, есть дата
и sed
часть этого ответа. Важно отметить, что сначала вы делаете сложную часть и получаете регекс - и только один раз - а потом только подрезаете один список результатов, а не говорите, получаете результаты, сортируете и сортируете.
Это не разбивается на имена файлов, содержащих новые строки, как это, скорее всего, будет сделано в других решениях. У этого решения есть свои предостережения, которые я объясню далее, но они незначительны и с ними легко справиться. На мой взгляд, это самое надежное решение.
Есть два случая, когда вышеуказанная команда может вызвать проблемы. Первая включает в себя глобусы ?
в именах файлов - хотя это и так уже более робастное решение, чем любое другое предлагаемое здесь, и вероятность того, что вы столкнетесь с ?
вообще сама по себе достаточно мала, есть вероятность того, что решение этих глобусов может совпасть более чем с одним именем файла. Подробнее об этом смотрите в here.
Другая возможность связана с ложным срабатыванием - Например, если у вас есть имя файла, фактически совпадающее со строкой date
, для которой мы ищем с помощью grep
, но которое ни в один из этих дней на самом деле не было изменено. Я не рассчитываю на то, что это будет проблемой, но если это так, то спросите об этом, и я, вероятно, смогу помочь вам уточнить регекс для того, чтобы справиться с этим.
Почему бы не передать результат поиска через sort, а затем выполнить ls для каждого линий?
find . -type f -ctime -1 | sort | while IFS= read -r filename; do ls -ls "$filename"; done
Фактически вы можете использовать комбинацию find, xargs и ls.
Вот пример команды: find. -тип f -print0 | xargs -0 ls -lt
find
будет рекурсивно искать все файлы в текущем каталоге. ls
за один вызов (при условии, что find
вернет меньше файлов ARG_MAX
). ls -lt
отсортирует эти файлы по времени и отформатирует вывод Чтобы получить информацию о вашей системе ARG_MAX
, вы можете ввести:
$ getconf ARG_MAX
> 2621440