2015-03-23 3 views

ответ

0

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

Команда last будет читать /var/log/wtmp, чтобы получить эту информацию для вас. Ключ должен использовать поле still logged on и получать дату в формате, который будет полезен для определения того, какие файлы были изменены после входа в систему. Один подход:

date -d "$(last $USER | grep still | head -n1 | cut -c 40-55)" "+%Y%m%d%H%M" 

Capture эту информацию для использования в переменной в формате полезной для touch команды:

logontm=$(date -d "$(last $USER | grep still | head -n1 | cut -c 40-55)" "+%Y%m%d%H%M") 

С даты/времени входа в систему, а также с датой в течении формат, вы можете передать эту дату touch создать временный файл с создания/модификации время последнего входа:

touch -t $logontm /tmp/tmp.$logontm 

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

find /path/to/check -newer /tmp/tmp.$logontm 

Вы можете адаптировать /path/to/check в соответствующих областях файловой системы, которые вы заинтересованы в Вы также можете настроить команду find, чтобы ограничить тип выбранных файлов. (например, добавление -type f для обычных файлов). Для всех файлов под вашим домашним каталогом вы можете заменить $HOME на /path/to/check. Сохраните результаты или используйте их, как вам нужно. Затем просто удалили файл TMP:

rm /tmp/tmp.$logontm 

Теперь предоставляется, есть, вероятно, и другие способы приблизиться к этому, и вы можете положить все это вместе в одной команде, но от руки, я не могу думать о другой способ получить все новые/измененные файлы для сеанса.Если вы хотите, чтобы объединить все в одной команде, это будет похоже на следующее, чтобы проверить home каталог для новых и измененных файлов для сессии (показано с line continuations для удобства чтения):

logontm=$(date -d "$(last $USER | grep still | head -n1 | cut -c 40-55)" "+%Y%m%d%H%M") && \ 
touch -t $logontm /tmp/tmp.$logontm && \ 
find $HOME -newer /tmp/tmp.$logontm && \ 
rm /tmp/tmp.$logontm 

Примечание: в зависимости на версии/реализации last в вашей системе вам может потребоваться настроить команду cut, чтобы гарантировать, что вы собираете правильную дату/время входа в систему.

0
head -n * 

Дописывает список всех файлов в локальном каталоге в команде head -n, так что это будет выглядеть примерно так:

head -n a.txt b.txt c.txt 

Но -n требует ряда, а именно число линии для печати. Поэтому, когда он получает a.txt, он терпит неудачу. Если вы хотите напечатать самый молодой, скажем, 10, файлы, команда, которую вы хотите это:

ls -t | head -n 10 -- 

Если вы хотите, чтобы первые 10 строк каждого файла в порядке их создания, вам это нужно:

for f in $(ls -t); do head -n 10 $f; done 

Если вы хотите что-то еще, вам необходимо сообщить нам об этом.

Смежные вопросы