Если Вы ранее не включили своего рода аудит, нет инструмента, который может сообщить об этом после того, как файл был изменен. Можно получить дату и время того, когда файл был в последний раз изменен, но не история пересмотра.
Продвижение, Вы могли установить, установить, включить auditd
пакет.
От auditctl
страница справочника:
-w path
Insert a watch for the file system object at path. You cannot insert
a watch to the top level directory. This is prohibited by the kernel.
Wildcards are not supported either and will generate a warning. The way
that watches work is by tracking the inode internally. If you place a
watch on a file, its the same as using the -F path option on a
syscall rule. If you place a watch on a directory, its the same as using
the -F dir option on a syscall rule. The -w form of writing watches
is for backwards compatibility and the syscall based form is more
expressive. Unlike most syscall auditing rules, watches do not impact
performance based on the number of rules sent to the kernel. The only
valid options when using a watch are the -p and -k. If you need to
anything fancy like audit a specific user accessing a file, then use
the syscall auditing form with the path or dir fields.
Существует больше дискуссии об этом в вопросе, Регистрирующем создания скрытого файла
Гну grep
grep -oE '[[:alpha:]]+_[[:digit:]]+_[[:alpha:]]+_[[:digit:]]+'
Используйте флаг perl-regex и оглянитесь и предварительные утверждения, чтобы гарантировать, что соответствие окружается /
grep -oP '(?<=/)[[:alpha:]]+_[[:digit:]]+_[[:alpha:]]+_[[:digit:]]+(?=/)'
Один путь с awk
:
awk -F/ '{for(i=1;i<=NF;i++)$0=($i~/_/)?$i:$0}1' file
Это должно сделать то, в чем Вы нуждаетесь.
Содержание tstfile.txt
:
/ABC/RTE/AD_900_VOP_123/OPP
/ABC/RTE/TRE/AD_900_VOP_145/BBB
/ABC/RTE/AN_900_VFP_124/FBF
/ABC/RTE/HD_900_FOP_153/WEW
/ABD/RDV/AD_900_VOP_123/OPP
/ABC/RTE/WD_900_VOP_123/GRR/TRD
/ABC/RTE/RTD/AR_900_VOP_443/SDD
Команда для преобразования tstfile.txt
:
$ sed 's|.*/\([0-9_A-Z]\+900[0-9_A-Z]\+\)/.*|\1|' tstfile.txt
AD_900_VOP_123
AD_900_VOP_145
AN_900_VFP_124
HD_900_FOP_153
AD_900_VOP_123
WD_900_VOP_123
AR_900_VOP_443
Вышеупомянутые извлечения все это затрагивает "900" до первой наклонной черты вправо, с которой встречаются в начале "900" (оставленный 9), и все до первой наклонной черты вправо в конце "900" (право на последний 0).
$ sed 's|.*/\([0-9_A-Z]\+900[0-9_A-Z]\+\)/.*|\1|' tstfile.tx
t /ABC/RTE/AD_900_VOP_123/OPP
/ABC/RTE/TRE/AD_900_VOP_145/BBB
/ABC/RTE/AN_900_VFP_124/FBF
/ABC/RTE/HD_900_FOP_153/WEW
/ABD/RDV/AD_900_VOP_123/OPP
/ABC/RTE/WD_900_VOP_123/GRR/TRD
/ABC/RTE/RTD/AR_900_VOP_443/SDD
– g4ur4v
25.06.2013, 19:41
sed --version
GNU sed версия 4.2.1.
– slm♦
25.06.2013, 19:47
Простой ответ заключается в том, что вы хотите прочитать файл каталога,
с командой, подобной cat.
, cat/etc
или cat mydir
.
Конечно, поскольку это «сырые» данные,
вы хотите использовать программу, которая лучше подходит
отображение данных, не относящихся к ASCII, в удобном для человека пути; например, hexdump
или od
.
К сожалению, как обсуждалось в Когда каталоги перестали быть читаемыми как файлы? , большинство версий Unix которые были выпущены в последние два десятилетия или около того, не позволяют этого. Так что ответ на ваш вопрос может быть «найти версию Unix, которая по-прежнему позволяет читать каталоги». AIX, большинство версий BSD, и все, кроме самых последних версий Solaris, могут быть квалифицированы. Поиск Linux, который позволяет ему, может потребовать использования машины времени.
-121--94350-В случае запуска с терминала можно
коснуться abc.txt
затем tail -f abc.txt
IMHO Perl предлагает самое простое и гибкое решение:
perl -nE 'say $1 if m{/(\w+\d+\w+\d+)/};' input_file
Обратите внимание, что input _ file
является необязательным: STDIN
будет отфильтрован, если/если имя входного файла не указано.
Возможно, вам не нужно сравнивать md5sum, если у вас есть доступная утилита diff.
if ! diff "$file1" "$file2" >/dev/null 2>&1; then
echo "$file1 and $file2 does not match" >&2
## INSERT-YOUR-COMMAND/SCRIPT-HERE
## e.g. cp "$file1" "$file2"
fi
в! отрицает, например, true, если оператор имеет значение false
Предостережение состоит в том, что требуется исходный файл для сравнения с diff, который (imo) совпадает со сценарием md5sum выше.
-121--47555-На машине CentOS 6.5 для настройки logrotatefor nginx я должен был сделать это:
logrotate /etc/logrotate.d/nginx
И затем я проверил, если logrotate заботиться о моей новой конфигурации nginx, как это:
cat /var/lib/logrotate.status
-121--3471- sed 's|.*/\([^/]*_[^/]*\)/.*|\1|
' <<\INPUT
/ABC/RTE/AD_900_VOP_123/OPP
/ABC/RTE/TRE/AD_900_VOP_145/BBB
/ABC/RTE/AN_900_VFP_124/FBF
/ABC/RTE/HD_900_FOP_153/WEW
/ABD/RDV/AD_900_VOP_123/OPP
/ABC/RTE/WD_900_VOP_123/GRR/TRD
/ABC/RTE/RTD/AR_900_VOP_443/SDD
INPUT
Это приведет к удалению до второго-последнего вхождения символа /
, непосредственно предшествующего символу _
в строке, сохранит все, что находится между этим и следующим вхождением /
, а затем удалит остальное.
Вышеуказанная команда печатает....
AD_900_VOP_123
AD_900_VOP_145
AN_900_VFP_124
HD_900_FOP_153
AD_900_VOP_123
WD_900_VOP_123
AR_900_VOP_443
Части, которые вы не хотите, имеют чесушку и три символа.
Часть, которую вы хотите сохранить, также начинается с Slash и имеет более трех символов, но третий символ является подчеркиванием, поэтому мы удаляем все детали, которые выглядят как / XXX
, но не / XX_
Это оставляет ведущую косушку на части, которую мы хотим сохранить, поэтому мы, наконец, также удалили эту косулью.
SED 'S | /..[^__] || G; S | ^ / || ' TMP / F1
Объяснение:
Команда SED состоит из двух S
(замененные команды), разделенные ;
; . Поскольку у нас есть косой в регулярном выражении, я использую S | ... | ... |
вместо обычного S /.../.../
Оба Управляющие команды имеют вторую часть пустой - замените ничем = удалить эту часть. Первый использует G
Global, другими словами, делают его снова и снова, пока нечего заменить.
[^ _]
совпадает с чем-либо, кроме подчеркивания.
T