Я не уверен, какая правильная команда должна отображать все измененные файлы в текущем сеансе? Это то, что я думал, но я получаю ошибки.Bash отображает обычные файлы, которые были изменены
alias display="ls -t | head -n *"
Я не уверен, какая правильная команда должна отображать все измененные файлы в текущем сеансе? Это то, что я думал, но я получаю ошибки.Bash отображает обычные файлы, которые были изменены
alias display="ls -t | head -n *"
Ваш вопрос несколько неясен, но интерпретация, которую я собираю, заключается в том, что вы хотите определить, какие файлы были созданы или изменены в текущем сеансе пользователя (т. Е. «С момента входа в систему»). Сам вопрос несколько связан, но первое, что вам нужно сделать, это установить, когда вы вошли в систему.
Команда 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
, чтобы гарантировать, что вы собираете правильную дату/время входа в систему.
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
Если вы хотите что-то еще, вам необходимо сообщить нам об этом.