Похоже, что метаданные хранятся в журнале systemd, поэтому они исчезли после
rm /var/log/journal/*/*
killall -9 systemd-journald
Обратной стороной является то, что все остальные системные журналы также исчезли.
Возможно, более чистый метод был бы описан в Как очистить journalctl
journalctl --vacuum-time=2d
Если вы хотите иметь возможность найти любой файл внутри enhancers
, вы не сможете prune
его найти. prune
означает, что find
вообще не спускается в него, поэтому нет никаких шансов, что он сможет найти там файлы. Здесь вы хотите не обрезать их, а исключить любой файл под ними, кроме xyz.js
.
Так:
find. \( \
-path./node_modules -o \
-path './.git*' -o \
-path./build \
\) -prune -o \( \
! -path '*/enhancers' ! -path '*/enhancers/*' -o \
-name xyz.js \
\) -print
Здесь несколько строк для удобочитаемости.
Замените -print
на -exec sh -c 'for file do something with "$file"; done' sh {} +
, если хотите что-то сделать с этими файлами.
Или, если вы хотите опубликовать -обработку вывода, используйте -print0
и используйте опции -z
/ --null
/ -0
в grep
/ xargs
/ cut
/sort
(предполагается, что реализации GNU или совместимы )для их работы с вводом с разделителями NUL -.
Вы можете создать сценарий оболочки bash с двумя rsync
командными строками с правилами фильтрации,
#!/bin/bash
rsync -Havn \
--filter="- target" \
--filter="- node_modules" \
--filter="-.git" \
--filter="- build" \
--filter="- enhancers" \
./ target
rsync -Havn \
--filter="+ xyz.js" \
--filter="+ */" \
--filter="- *" \
src target
Этот шеллскрипт довольно легко редактировать, пока он не выдаст хороший результат с -n
, что означает «пробный прогон», показывающий только то, что является намерением.
Когда все выглядит правильно, вы можете удалить -n
из двух командных строк и позволить rsync
делать свое дело. Или, может быть, вы довольны текстовым выводом и сохраните его в файл или каким-то образом направите его в другие команды (, чтобы выполнять другие действия, кроме копирования rsync -).