libarchive
bsdtar
может обрабатывать большинство этих форматов файлов, поэтому вы можете:
find . \( -name '*.zip' -o \
-name '*.tar' -o \
-name '*.tar.gz' -o \
-name '*.tar.bz2' -o \
-name '*.tar.xz' -o \
-name '*.tgz' -o \
-name '*.tbz2' -o \
-name '*.7z' -o \
-name '*.iso' -o \
-name '*.cpio' -o \
-name '*.a' -o \
-name '*.ar' \) \
-type f \
-exec bsdtar tf {} '*vacation*jpg' \; 2> /dev/null
Что вы можете упростить ( и улучшите соответствие без учета регистра) с помощью GNU find
с помощью:
find . -regextype egrep \
-iregex '.*\.(zip|7z|iso|cpio|ar?|tar(|\.[gx]z|\.bz2)|tgz|tbz2)' \
-type f \
-exec bsdtar tf {} '*vacation*jpg' \; 2> /dev/null
Это не печатает путь к архиву, в котором находятся файлы * vacation * jpg
. Чтобы напечатать это имя, вы можете заменить последнюю строку на:
-exec sh -ac '
for ARCHIVE do
bsdtar tf "$ARCHIVE" "*vacation*jpg" |
awk '\''{print ENVIRON["ARCHIVE"] ": " $0}'\''
done' sh {} + 2> /dev/null
, что даст следующий результат:
./a.zip: foo/blah_vacation.jpg
./a.zip: bar/blih_vacation.jpg
./a.tar.gz: foo/blah_vacation.jpg
./a.tar.gz: bar/blih_vacation.jpg
Или на zsh
:
setopt extendedglob # best in ~/.zshrc
for archive (**/*.(#i)(zip|7z|iso|cpio|a|ar|tar(|.gz|.xz|.bz2)|tgz|tbz2)(.ND)) {
matches=("${(f@)$(bsdtar tf $archive '*vacation*jpg' 2> /dev/null)"})
(($#matches)) && printf '%s\n' "$archive: "$^matches
}
Обратите внимание, что существует ряд других форматов файлов, которые просто zip
или tgz
файлы, замаскированные, например файлы .jar
или .docx
. Вы можете добавить их в свой шаблон поиска find
/ zsh
, bsdtar
не заботится о расширении (например, он не полагается на расширение для определения типа файла).
Обратите внимание, что * vacation * .jpg
выше соответствует полному пути к члену архива, а не только имени файла, поэтому он будет совпадать с vacation.jpg
, но также и с отпуск / 2014 / file.jpg
.
Чтобы сопоставить только имя файла, можно использовать режим extract , использовать -s
(подстановка), который использует регулярные выражения с p
флаг, чтобы напечатать имена совпадающих файлов, а затем убедиться, что файл не извлечен, например:
bsdtar -'s|.*vacation[^/]*$||' -'s|.*||' -xf "$archive"
Обратите внимание, что он выводит список на stderr и добавляет >>
в каждую строку. В любом случае bsdtar
, как и большинство реализаций tar
, может искажать имена файлов на дисплее, если они содержат некоторые символы, такие как новая строка или обратная косая черта (отображаемые как \ n
или \
).
В Cinnamon 3.8.x файл glass.log
был объединен в файл ~/.xsession-errors
.
Вы можете просматривать и фильтровать только (просматриваемые)glass.log
записи на вкладке Журнал приложения Melange -Cinnamon Debugger. Чтобы открыть Melange, щелкните правой кнопкой мыши на панели задач в Cinnamon и выберите Устранение неполадок → Зеркало .